ITProのページ「Webプログラミング実力アップ Part1 正しいPerl/CGIの書き方」を参考に、Module::Starter::PBPをインストールして、
perl -MModule::Starter::PBP=setupを実行して、module-starterを実行すると、
Unknown placeholder <MAIN PM FILE> in Makefile.PLというエラーが出た。
何かCPANのモジュールが足りないのか、1つ目のコマンドで生成された、~/.module-starter/configの内容が悪いのか、などと思って色々試したが、全く改善しなかった。
仕方なく、インストールされたModule::Starter::PBPの本体であるPBP.pmを解析した所、同じディレクトリのSimple.pmと整合していないことが判った。どうやら、CPANにてModule::Starter::Simpleがバージョンアップされて(今回インストールされたのはv0.0.3のPBP.pmとv1.44のSimple.pm)不整合が発生したようだ。
結局、PBP.pmのsub Makefile_PL_gutsとsub Build_PL_gutsの最初の方を以下のように修正した。
(#の後が元々の記述、#の後が無い行は新しく追加した行)
sub Makefile_PL_guts {
my $self = shift;
my $main_module = shift; #
my $main_pm_file = $self->_module_to_pm_file($main_module); #
my %context = (
'MAIN MODULE' => $main_module, #shift,
'MAIN PM FILE' => $main_pm_file, #shift,
sub Build_PL_guts {これにより、module-starterがエラー無く動くようになった。
my $self = shift;
my $main_module = shift; #
my $main_pm_file = $self->_module_to_pm_file($main_module); #
my %context = (
'MAIN MODULE' => $main_module, #shift,
'MAIN PM FILE' => $main_pm_file, #shift,
それから、上記ITProのページに書かれている通りに、module-starterを実行した直後の状態の.pmに対して"perl Build test"までを実行すると、
Global symbol "$VERSION" requires explicit package name ...というエラーが出る。どうせ雛形の中の書き換える部分のエラーなので放っておいても良いのだが、これを回避するには、同じくPBP.pmの中に書かれているModule.pmのテンプレートの
use version; $VERSION = qv('0.0.3');
を
use version; our $VERSION = qv('0.0.3');
に書き換えておけばよい。(書き換えた後は~/.module-starterを作り直す必要があるので注意)
ついでに、今回、Test::Perl::Criticのインストールにかなり梃子摺った。依存関係にあるPerl::Critic(v1.078)をインストールしようとすると、どうしてもテストが通らなかった。
結局、正式版ではないv1.079_003のPerl::Criticとその依存モジュール一式を手動でインストールすることで解決したが、えらい手間だった。
あと、Test::Without::Moduleは先に入れておいた方が良さそうだ。
CPANは素晴らしいが、使うには未だにかなりのパワーが必要のようだ。これはCPANの宿命だろうか。
コメント