ActivePerl 822と古いMakeMaker。
ActivePerl 822の上書きインストール後に、次のようなエラーが発生。
C:\temp> h2xs -X -A MyModule
C:\temp> cd MyModule
C:\temp\MyModule> perl Makefile.pl
C:\temp\MyModule> nmakeMicrosoft (R) Program Maintenance Utility Version 1.50
Copyright (c) Microsoft Corp 1988-94. All rights reserved.Can't use string ("pmfiles.dat") as a HASH ref while "strict refs" in use at C:/Perl/site/lib/ExtUtils/Install.pm line 990.
NMAKE : fatal error U1077: 'C:\WINDOWS\system32\cmd.exe' : return code '0xff'
Stop.
いろいろと試してみたのですが、どうやらMakefile.plができるところまでは問題がなくて、「perl Makefile.pl」で作られるMakefileに謎の「<< pmfiles.dat」なる文字列が残っているのが問題。
更に言うと、Makefile.plから呼び出されているExtUtils::MakeMakerが悪くて、実は旧ActivePerl時代にC:\Perl\site\lib\に更新インストールされたMakeMakerが、ActivePerl 822に同梱されている新しいものより優先して使用されているのがいけないようです。
それならば、C:\Perl\site\lib\からExtUtils::MakeMakerは要らないはずだからアンインストール、と思ってトライ。
C:\temp\MyModule> ppm remove --area site ExtUtils::MakeMaker
C:\temp\MyModule> perl Makefile.pl
Can't locate ExtUtils/MM_Win32.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at (eval 4) line 3.
Compilation failed in require at C:/Perl/lib/ExtUtils/MakeMaker.pm line 43.
Compilation failed in require at Makefile.pl line 3.
BEGIN failed--compilation aborted at Makefile.pl line 3.
なぜかC:\perl\libからもExtUtils::MakeMakerが消えてるようです。
PPMで起動するGUIの一覧に、MakeMakerが見当たらないので、ここからZipファイルを取得。でてきたPPDファイルを指定してインストール。
C:\temp\MyModule> ppm install CPAN-MakeMaker.ppd
C:\temp\MyModule> perl Makefile.pl
Can't locate ExtUtils/MM_Win32.pm in @INC (@INC contains: C:/Perl/site/lib C:/Perl/lib .) at (eval 4) line 3.
ExtUtils::MakeMakerは入ったのだけど、ExtUtils/MM_Win32.pmは相変わらずないまま。他のMM_*.pmファイルはインストールされてるんだけど。
ということで、ActivePerlのzipファイルを取得して、この中のExtUtils/MM_Win32.pmをC:\perl\libにコピーして解決。
皆様には、こんな試行錯誤をするよりは、一度ActivePerlを削除して、きれいな環境に新しいのを入れることをお奨めします。PPMなりcpanなりで追加インストールしたライブラリ群を再インストールするのが嫌だけど、安全確実な方法ではあるんじゃないかと思います。
そういえば、ActivePerl Beta DownloadにActivePerl 5.10.0 Build 1000 Betaが出てきてますね。うーん、まだ5.6と5.8と5.8のヘッドの間でどたばたしてるのに、もう5.10系が来ちゃってるのか...。