前回に続いて、XAMPP(ずっとザンプと思っていたら Wikiでは「シャンプ」と読むらしい)と言う Windows PC上にローカルサーバー(Apatch)を設置するアプリでの Perl実行に関する話題。
Perlと言うプログラム言語は Web開発用として用いられているらしく文字列操作などが結構充実しているが、前回のようにこのローカルサーバーからプロバイダのメールサーバーの自分のアカウントに接続してメール送信しようとするとメール送信プロトコルなどのモジュールをローカルの Perlにインストールしないといけないことがある。今まではプロバイダのサーバーで実行するようにしていたので、殆どのメジャーなモジュールは使用できたが、ローカル(自前の簡易)なサーバーだといくつか不足する。
今回はこの追加モジュールのインストールで躓いた。検索すると CPANとか PPMとかでインストールする方法が出てくるが、素人には結構面倒くさい&難しい&結構失敗する。今回はメールサーバーとの通信に必要な Email::Senderと言うモジュールなどをインストールしようとしたんだが、> cpan install Email::Sender とやると、「指定されたパスにファイルが見つからない」的なエラーで失敗してしまう。ppmで install Email::Sender とやっても 「PPDファイルが見つからない」的なエラーが返される。いろいろ調べたが、情報不足で解決しなかったので、Perlを最新版にアップデートすることにした。
現在私のPCの XAMPPでインストールされている Perlのバージョンは StrawberryPerlと言うセットの 5.16.3(2013年3月リリース)だが、同じStrawberry Perlの正式最新版は 5.30.0.1 となっており、これの .msi版をダウンロードしてきて xamppを終了し、念の為に 元の C:\xampp\perl / C:\xampp\cpan / C:\xampp\c などのディレクトリの名前に _org を付加しておいてからインストールした。(こうすることで「同名のフォルダが存在する」と言う不測のエラーを回避できるだろうという勝手な判断)
インストール後 xamppを再起動して、ローカルホストの perlのページ(.cgi)を実行したらあっさり表示された。コマンドプロンプトから perl -v とやると バージョンも 5.30.0.1とアップしている。どうやら無事アップデート出来たようだ。
で、>cpan install Email::Sender とやろうとして念の為に確認すると何と Email::Sender は既にインストールされていた。・・・・今までの悪戦苦闘は何だったんだ! と思いつつ、今度は PPMを実行しようとしたら
Can't load 'C:/xampp/perl/vendor/lib/auto/XML/Parser/Expat/Expat.xs.dll' for module XML::Parser::Expat: load_file:指定されたモジュールが見つかりません。 at C:/xampp/perl/lib/DynaLoader.pm line 193.
at C:/xampp/perl/vendor/lib/XML/Parser.pm line 18.と PPMが走らない。 #cpan -D PPM で ppmモジュールを確認すると、ppmモジュール自体はインストールされている様子。更にインストールディレクトリの構造をよく見ると、5.16で c:\xampp\perl\c だったフォルダーが c:\xampp\c になっている。ppmの実行に必要なファイルがこの cディレクトリにあるらしいのでフォルダ毎元の場所に移動しようかとも思ったが、それで別のところに新たな不具合が出ても困るので、c:\xampp\perl の下に c:\xampp\c のシンボリックリンクを作ってみた。結果は大正解!
元通り PPMコマンドも使えるようになった。Web検索では XAMPPの Strawberry perlでは CPANが使えないとか、いろいろな情報が飛び交っているが、バージョンの違いでこうした細かな違いがアチコチにある様子。
さて、やっとメールサーバーに接続するスクリプトをテスト出来るようになったのでコーディングに取り掛かろう。
補足:xamppをインストールしたままの素の perl 5.16では上記 cディレクトリが存在しない。
ここを参考に cディレクトリを別途入手・コピーしてそのディレクトリに Windows の pathを通さないと ppm自体が動作しない。
補足2: 現在はもうリンク切れで公開されていないが、インストール済みモジュールのチェックを行う cgiツールがある。"modcheck.cgi" というツールだ。
図のように これをサーバー上で実行すると 合計 5,500以上のモジュールがインストールされていることが分かる。(この図は Lolipopのサーバーで実行したもの)