Tomute’s Notes

2007-04-16

[]「正しい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<perlartistic>
in paragraph 44.

このエラーの詳細は良く分からなかったのだが、以下の記事にそれらしい情報が載っており、とりあえず無視して良さそうなので、無視することに。

no title


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

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で見つからなかったので、The CPAN Search Site - search.cpan.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にする)。

[] PPM (Perl Package Manager) のメモ

日経ソフトウェア2007年3月号の記事「正しいPerl/CGIの書き方」をWindows環境で演習するため、CPANの代わりにPPMを使った際のメモ。


  1. Windowsの「スタート」メニューの「ActivePerl」-「Perl Package Manager」を選択し、PPMUIを起動。
  2. PPMのメニューの「View」−「All Packages」を選択し、インストール可能なパッケージ一覧を表示する。
  3. インストールしたいPackageを選択し、右クリックのメニューでInstallにチェックする。
  4. PPMのメニューの「File」−「Run Marked Actions」を選択し、インストールを実行する。
  5. 最後にPPMのメニューの「View」−「Installed Packages」を選択し、インストールしたパッケージが表示されていればOK。

注1:プロキシサーバーを経由する場合は、以下ように環境変数HTTP_Proxyを設定する必要がある。

C:\>SET HTTP_Proxy=http://プロキシのアドレス:ポート番号/

注2:PPMUIではなく、PPMのコマンドを使って上記インストールを行う事も可能。


今回は、「正しいPerl/CGIの書き方」の演習を行うために、Module::Starter::PBPインストールしたのだが、前提パッケージのModule::Starterも自動的にインストールしてくれるのが嬉しいところだ。


疑問点としては、Module::Starter::PBPの最新バージョン0.0.3を入れているにも関わらず、PPMUI上でUpgradable Packagesに分類されている点がある。

参考サイト