最近のPerlのデバッグ

Perlよく分からないけど最近こうやってデバッグするようにしてる。

Data::Printer

これまで値の確認にはData::Dumperを利用していたけど、程良く整形して色付けしてくれるData::Printerを使うようになった。use Data::Printerの代わりにuse DDPというエイリアスでも利用できる。useするとpという整形出力用メソッドを提供してくれる。Rubyで言うと、ppを利用していたのがap(=awesome_print)を利用するようになったというイメージ。これは適当にSelenium::Remote::Driverクラスのインスタンスをpメソッドで出してみた図。

Carp::REPL

REPLはコード中で処理を止めてPerlの対話環境を開くやつ。これまで使ってなかったけど、良さそうという話をTLで見かけたので、適当にData::Printer入れて値確認するよりは寧ろREPLを挿入して確認するようにしてる。サーバサイドアプリとかだと値を確認するのに逐一再読込みするのは面倒なので、その場で確認できるのは便利。値の確認だけじゃなくてちゃんと値の変更もできる。テストがfailしたらREPLを開くみたいな機能もあるらしいけどまだ利用したことはない。Rubyだとpryというかirbみたいなイメージ。use Carp::REPL qw/repl/してコード中でrepl()したらそこで対話環境が開く。

SnipMate.vim

あのエディタでfiletypeがperlのコードを開いているときは、SnipMate.vimを利用してd + TABとかで呼び出せるようにしてる。インデントはどうせ'<'と'>'で行うし、補完は利用しないので、TABキー有効利用できて良い。マクロ登録より使いやすい。

snippet d
	use Data::Dumper; warn Dumper ${1};
snippet p
	use DDP; warn p ${1};
snippet r
	use DDP; use Carp::REPL qw/repl/; ${1: repl();}${2}

今はサーバログを好みにフィルタリングして整形したいとか思ってる。