最近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を実行すると以下のように止めていろいろ出来ます。
便利ですね。ほかにもいろいろ機能があるみたいなので、また機会があったら調べてみてブログに書こうと思います。