$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

Carp::Replyを使って、モジュールの挙動を追いかける

 最近Cartonコードリーディング会をやっているのですが、そのときにCarp::Replyを使ってみたのでメモ。

 例えばCartonとかの中身を追いかけるときに、この時点でこの変数はどうなっているのかとか調べたくなることがあります。そういうときにRubyのPryみたいな機能を持つ、Carp::Replyというのを使ってみました。

 ひとまずやりやすいようにCartonのrepositoryをclone。

$ cd ~/development/
$ git clone https://github.com/miyagawa/carton.git

 ここに変更加えたのが使われるようにPERL5LIBに追加します。

$ export PERL5LIB=~/development/carton/lib

 あとは止めたい場所に以下の文を追加するだけです。

use Carp::Reply qw(repl);Carp::Reply::repl();

 例えばcarton installのsnapshot周りの作成で止めたかったので、以下の場所に追加します。

         }
     };

+    # install.jsonを見つけたディレクトリのMYMETA.jsonのリストが来る
     for my $file (@installs) {
         my $module = Carton::Util::load_json($file->[0]);
         my $prereqs = -f $file->[1] ? CPAN::Meta->load_file($file->[1])->effective_prereqs : CPAN::Meta::Prereqs->new;
@@ -164,6 +168,9 @@ sub find_installs {
         }
     }

+    use Carp::Reply qw(repl);Carp::Reply::repl();
+
     my @new_dists;
     for my $module (sort keys %installs) {
         push @new_dists, $installs{$module};

 それで追記した場所にPERL5LIBを通しつつ、carton installを実行すると以下のように止めていろいろ出来ます。
f:id:shiba_yu36:20140405134239g:plain

 便利ですね。ほかにもいろいろ機能があるみたいなので、また機会があったら調べてみてブログに書こうと思います。