carton install が途中で進まなくなって勉強になった件

止まってしまう原因は、File::Rsync のインストールのときだった。
File::Rsync は、インストール時に rsync コマンドのパスをこれで良いかと確認してくるが、ExtUtils::MakerMaker の prompt メソッドを使用していないため、PERL_MM_USE_DEFAULT の設定値が無視され、必ず標準入力からの入力待ちになる。

本来なら、cpanm の デフォルトは interactive => undef となっているので、PERL_MM_USE_DEFAULT が真となりプロンプトは表示されない。その他勉強になったのは、 cpanm のオプションは PERL_CPANM_OPT という環境変数でカスタマイズできそうだが、carton の中では local $ENV{PERL_CPANM_OPT}; としてあるので、役にたたないようだ。今回は carton の実行ファイルをコピーして直接編集して、cpanm を verbose にしたりしたけど、他に方法はあるんだろうか。

よく見たら File::Rsync は、バグとラッカーにアクティブなバグがたくさんあって選定からして間違いだったみたい。
File::RsyncP というのが評価も高いし使ってみようかと思う。