「正しいPerl/CGIの書き方」をWindows環境で試した際のメモ

日経ソフトウェア2007年3月号の記事「正しいPerl/CGIの書き方」をWindows環境で試した際のメモ。
(ITProにも「Part1 正しいPerl/CGIの書き方 | 日経 xTECH(クロステック)」という記事で、日経ソフトウェアの記事がそのまま転載されている)

1. CPANの替わりにPPMを利用
記事ではCPANを使ってモジュールをダウンロードしているのだが、設定が複雑そうだったのでPPMを利用。


2. 記事の「(3) ビルドのテスト」でエラー発生
以下のコマンドを実行したらエラーが発生。

$ perl Build.PL

エラーは以下。

Can't locate Module/Build.pm in @INC (@INC contains: C:/Perl/site/lib
C:/Perl/lb .) at Build.PL line 3.
BEGIN failed--compilation aborted at Build.PL line 3.

PPMでModule::Buildをインストールしたら解決。良く見ると記事の注意書きにインストールしろと書いてあった。


また、以下のコマンドの実行の際にも警告メッセージが表示された。

$ perl Build

エラーは以下。

Build: blib\lib\My\Yakudoshi.pm: cannot resolve L
in paragraph 44.

このエラーの詳細は良く分からなかったのだが、以下の記事にそれらしい情報が載っており、とりあえず無視して良さそうなので、無視することに。
IBM Developer 日本語版 : 大変申し訳ありません。このページは無効です。


更に以下のコマンドでも二つのエラーが発生。

perl Build test

エラー1は以下。

t\00.load.........NOK 1#   Failed test 'use My::Yakudoshi;'
#   in t\00.load.t at line 4.
#     Tried to use 'My::Yakudoshi'.
#     Error:  Global symbol "$VERSION" requires explicit package name
at C:\Perl \home\test\My-Yakudoshi\blib\lib/My/Yakudoshi.pm line 7.
# Compilation failed in require at (eval 3) line 2.
# BEGIN failed--compilation aborted at t\00.load.t line 4.
Use of uninitialized value in concatenation (.) or string
at t\00.load.t line 7.

自動生成された*.pmファイルのバージョン定義部分「$VERSION = qv('0.0.3');」という箇所を「our $VERSION = qv('0.0.3');」に変更するとエラーが解消された。


エラー2は以下。

t\perlcritic......Can't locate Test/Perl/Critic.pm in @INC

これは、モジュールCritic.pmをインストールしていない事が原因なのだが、Critic.pmがPPMで見つからなかったので、Search the CPAN - metacpan.orgから手動で入手する事に。


3. Test::Perl::Critic.pmの手動インストール
(a) CPANからTest-Perl-Criticをダウンロード
(b) CPANからTest-Perl-Criticの前提となるPerl-Criticをダウンロード
(c) PPMPerl-Criticの前提となるString-Format、Module-Pluggable、B-Keywords、List-MoreUtils、Config-Tinyをインストール
(d) PPMPerl-Criticのオプション前提となるFile-Home、Perl-Tidyをインストール
(e) CPANからPerl-Criticの前提となるModule-Pluggable、PPIをダウンロード
  (Module-PluggableはPPMでインストールしたものだとバージョンが低すぎた為)
(f) Module-Pluggableを手動でビルドしてインストール
(g) PPIはModule::Build方式に対応しておらず、ビルドできなかったのだが、PPI.pmとPPIフォルダをそのままPerl/lib配下にコピー。
あとは、META.ymlに書かれているrequiresの中でParams::Utilモジュールをインストール。
(h) Perl-Criticを手動でビルドしてインストール
(i) Test-Perl-Criticを手動でビルドしてインストール
(j) 最後にTest-PodをPPMでインストール必要も有った
一応これで、perl Build testがエラーなく実行できるようになり、演習を進めれるようになった。


上記作業を纏めると、CPANのモジュールを手動でインストールする場合、以下の手順で行うのが良さそう。
ステップ1:Module::Build方式をサポートしていれば(Build.PLが存在すればサポートされている)、INSTALLというテキストファイルの内容に従って、インストールを行う。この方法だと、不足している前提モジュールを教えてくれる。
ステップ2:Module::Build方式がサポートされていない場合、手動で*.pmをlib配下等にコピー。また、Makefile.PL等をチェックして、前提モジュールを別途インストールする。(Module::Buildに対応させる方法もありそうだが、いまいち良くわからないのでやってない)


備考:

  • 関連モジュールのインストールの一環で、Scalar::Utilのversion 1.19を入れたのだが、perl Build testで以下のエラーが出るようになった。とりあえず、version 1.18にダウングレードしたらエラーは出なくなった。原因は不明。
Weak references are not implemented in the version of perl.....
  • Test::Pod::Coverageだけでなく、Test::Podもインストールしないとだめ。
  • yakudoshi.cgiWindowsで使う場合は、最初の1行を環境にあわせて修正する必要有り。(例:#!c:/perl/bin/perl
  • yakudoshi.tmplをそのまま使う場合は、文字コードをUTF8にして保存し直さないと文字化けする(もしくはyakudoshi.cgiとyakudoshi.tmplのcharsetをshift_jisにする)。