この記事は、Perl Advent Calendar 2014 - Qiita の6日目の記事です。(※初学者向け)
シュッと変数の様子を見る
Perlでプログラムを書いていて、「ここの変数なにが入ってるのかな?」と調べたい場合、このようにprint
で表示させるプログラムを書くと
use strict; use warnings; my @array = (1, 2, 3, 4, 5); my $array_ref = [@array]; my %hash = ( name => "tarou", age => 20, ); my $hash_ref = {%hash}; print @array, "\n"; # => 12345 print %hash, "\n"; # => nametarouage20 print $array_ref, "\n"; # => ARRAY(0x7fd949828318) print $hash_ref, "\n"; # => HASH(0x7fd94983d160) 1;
このように、素朴な出力がされます。さすがにこれは見にくいですし、わざわざforeach
を回すというのも面倒なので、以下の方法でシュッと出します。
解決法
Data::Dumper
を使います。
use strict; use warnings; use Data::Dumper; my @array = (1, 2, 3, 4, 5); my $array_ref = [@array]; my %hash = ( name => "tarou", age => 20, ); my $hash_ref = {%hash}; print Dumper @array; print Dumper %hash; print Dumper $array_ref; print Dumper $hash_ref; 1;
こんな感じに、Dumper
をかませてあげます。結果は以下のようになります。
# print Dumper @array; の結果 $VAR1 = 1; $VAR2 = 2; $VAR3 = 3; $VAR4 = 4; $VAR5 = 5; # print Dumper %hash; の結果 $VAR1 = 'name'; $VAR2 = 'tarou'; $VAR3 = 'age'; $VAR4 = 20; # print Dumper $array_ref; の結果 $VAR1 = [ 1, 2, 3, 4, 5 ]; # print Dumper $hash_ref; の結果 $VAR1 = { 'name' => 'tarou', 'age' => 20 };
これでprint
単体で使った時よりも分かりやすく変数の中身が表示されるようになりました。文字列と数値の差も分かって安心。
マクロでシュっとData::Dumper
を使う
Data::Dumper
を使うことで、printデバッグが捗るようになりました。しかし、毎回
use Data::Dumper; print Dumper $hoge;
と書くのは非常に面倒です。あと、だいたい忘れます。そこで、smartchr
を使います。smartchr
はEmacsでもVimでも使えるので安心。
設定
Emacsであれば、imakado/emacs-smartchr · GitHubをinstallした後で、
(require 'smartchr) (add-hook 'cperl-mode-hook '(lambda () (progn (local-set-key (kbd "D") (smartchr '("D" "use Data::Dumper; warn Dumper "))) )))
と設定してあげます。設定が反映された後は、DD
と打つとuse Data::Dumper; warn Dumper
がシュッと出るようになります。
シュッと出る様子
シュッと見つける
iTerm2を使っている人専用です。iTerm2では特定のキーワードをハイライトしてくれる機能があります。Webアプリ開発をしていると、アクセスログが大量にコンソールに流れてきて、どこにデバッグ用の出力があるのかわからなくなります。
iTerm2のPreferences->Profiles->Advancedに行き、Triggersのeditを選んで設定してあげます。
こんな感じで設定すると、ハイライトされます。また、通知やアイコンのバウンス等もできるので大変便利です。
シュッと見つかる様子
こんな感じに、$VAR
に色がつくので、簡単に見つけることが出来ます。