さよならActivePerl、こんにちはStrawberry Perl

最近のActivePerlはおかしい

  • アカウント登録しないとdownloadできなくなった
  • やたらActiveStateからメールが飛んでくる
  • PPMがなくなってしまった
    • PPMの使えるバージョンに戻してもDBエラーとかで使えない
    • PPMの代わりにCPANを使ってもMinGW等のコンパイラを入れろとか、path張ってあるのに怒られる
  • コマンドライン実行で引数が渡せなくなった(一応解決したがインストールするたびにレジストリ設定しなおす必要あり)

トラブルシュートするために使っているんじゃないのに、もううんざり。

代替としてStrawberry Perl

試しにStrawberry Perlを入れてみた。

  • PPMはないが、CPANが普通に使える
    • 自身でgcc,gmake等のコンパイル環境を持っているので難なくpackageを追加できる
  • コマンドライン実行で引数が渡せない。これは一緒かもしれない。

Strawberry Perlでは引数問題以外何も悩まなくて済むのでActivePerlはもう捨てることにした。 使うのが目的であって、トラブルシュートに時間をつぶしたいわけではない、誰も。 今までありがとうActivePerl。でも、何でこんなに使えなくなってしまったのか、残念。

コマンドライン実行で引数が渡せない問題の対処法

perl c:\tools\foover.pl 1 2 3

のようにscriptを絶対パスで指定する面倒な方法なら@ARGSが認識されるのに、

foover.pl 1 2 3

としても@ARGSで取得できるはずの"1 2 3"のパラメータが空っぽになる問題。これは悩んだ。同じWindows 10でも動くPCと動かないPCが出る。違いがよく分からない。結局、stackoverflowの以下など散在している情報を集めて解決策が見つかった。

How do I make my Perl scripts act like normal programs on Windows?

以下のレジストリをいじる。ActivePerlとStrawberry Perlでそれぞれ使っているやつが違うので適宜。

HKEY_CLASSES_ROOT\Perl_program_file\shell\Execute Perl Program\command
HKEY_CLASSES_ROOT\pl_auto_file\shell\open\command
HKEY_CURRENT_USER\Software\Classes\Applications\perl.exe\shell\open\command

これらの値が

"C:\Strawberry\perl\bin\perl.exe" "%1"

になっているのを

"C:\Strawberry\perl\bin\perl.exe" "%1" %*

とすれば良いと思われる。

(ActivePerlの場合はC:\Strawberry\perl\bin\perl.exeC:\Perl64\bin\perl.exeに置換、今更要らないが)

CPANからpackageをインストールする

例えばEXIF関連のpackageに何があるかCPANのサイトEXIFでサーチしてみると、

Image::EXIF

などが見つかる。これをinstallする場合は以下のようにする。

コマンドプロンプトからCPANを起動し、installコマンドを実行すればよい。

c:\tmp> cpan
cpan> install Image::EXIF