最近 GrowthForecast とか GrowthForecast とかいじっているので、ruby でいうところの binding.pry みたいにコードの途中にブレークポイント貼ってごにょごにょデバグとかやりたいなーと思って、antipop さんの記事 を見て、Carp::REPL を試してみていたのですが、どうもすんなり入らないなーとか呟いていたところ、


という情報を頂いたので、Carp::Reply を試してみました。ちなみに reply というものもあって、こちらはインタラクティブシェルを起動するコマンドツールのようですね。※ コード読むと Carp::Reply が use Reply していました。

インストール
$ cpanm install Reply # こっちが reply
$ cpanm install Carp::Reply
Carp::REPL は苦戦してたのですが、こちらはすんなり入りました。Carp::REPL よりも依存モジュールが少ないので時間もかからなかった。

reply はこんなかんじでつかいます。簡単ですね!
$ reply
0> my $a = 0;
$res[0] = 0
1> $a+1;
$res[1] = 1

で、Carp::Reply はこんなかんじで使います。※比較のために antipop さんの記事 を元にしております。めんどくさかったわけじゃないw
#!/usr/bin/env perl
use strict;
use warnings;
use Carp::Reply qw(repl);

my $foo = 'foo value';
Carp::Reply::repl();        #=> ここでREPLに入る
                            #=> ↓は、REPLをC-dが:qコマンドで抜けた後に実行される

my $baz = 'baz value';
print "$baz\n";
自分は lib/GrowthForecast/Web.pm に Carp::Reply::repl(); でブレークポイントを貼って、curl でAPIを叩いて止まった所でごにょごにょとかやってました。

reply のコンソールが止まった所で #list とやると周辺ソースコードが表示されたり、#env とやると環境変数一覧が表示されたり、#bt とするとバックとレースが表示されたりするようですね。詳しくは本家のコマンド一覧を見るとよいかと思います。残念なことにステップ実行(次の行に進む)はなさそうですが ... T T

これで perl のデバグが捗るようになったのでお試しください!それでは! 

トラブルシュート

reply および Carp::Reply::repl() でヒストリ機能が使えるらしかったのですが、自分の環境では readline が動かず(´・ω・`) 結論としては、こちらのサイト のようにTerm::ReadLine::Gnu を入れたら動くようになりました! :D  同様に Linux 環境であれー?となっている方はお試しください!
$ cpanm install Term::ReadLine::Gnu