Windows 環境で /usr/bin/perl を手っ取り早く実現する方法

Posted by
ぴろり
Posted at
2014/02/11 19:05
Trackbacks
関連記事 (0)
Post Comment
コメントできます
Category
開発メモ カテゴリ

 Windows 環境で Perl を利用したい場合、おそらく多くの人は「Windows Perl」あたりで検索をかけると思うので、ActivePerl が一般的だと思います。インストーラが用意されているので、何も考えずにインストールできますし、勝手に実行パスも通してくれますし、モジュールのインストールも GUI で行えますし、まぁ、ほとんどの場合これで問題ありません。
 そこに、後から XAMPP を導入して動かそうとした場合、実行パスの問題から Perl CGI がうまく動作しません。ジャンクションを設定したり、Perl 自体をビルドする方法もありますが、もっとお手軽に、ファイルを一つコピーするだけで済ませる覚書きです。

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

背景

 多くの Perl CGI スクリプトの shebang 行は #!/usr/bin/perl となっていて、これを XAMPP 環境で動作させると、Apache サーバは X:\usr\bin\perl.exe*1を起動しようとします。XAMPP に含まれる Perl も、ActivePerl でインストールした Perl も、大抵はここに置かれていないので、ほとんどの環境ではエラーになります。その対処方法として;

shebang 行を書き換える
 スクリプトの shebang 行を、perl.exe が置かれた実際のパスに書き換えます。しかし、作成したスクリプトを Linux や他の環境に持っていた場合に、今度はそちらで動作しなくなるため、また書き換えを要します。
ジャンクションを使う
 X:\usr\bin に perl.exe が置かれたディレクトリのジャンクションを作成します ⇒ Windows上で「#!usr/bin/perl -w」のままMovable Typeを利用する
Perl を X:\usr\bin にインストールする
 perl.exe が X:\usr\bin に置かれるように Perl をインストールします。ActivePerl の場合、インストール パスを X:\usr と指定すればOK。X:\usr\bin に置かれるよう、ソースからビルドする方法もあります ⇒ Windowsで/usr/bin/perlを実現する方法: 小粋空間

/usr/bin/perl を実現する

 ActivePerl をインストール済みだったり、Perl の実行環境にパスが通っていて、コマンド プロンプトで perl -v と実行して Perl が起動するような場合には、もっと手っ取り早い方法があります。X:\usr\bin ディレクトリを作成し、Perl のインストール ディレクトリから perl.exe をコピーするだけです。ショートカットでは動作しませんので*2、ファイル自体をコピーしてください。
 Perl スクリプトの実際の処理は、perl516.dll といった DLL が担っており、perl.exe は単にこの DLL に処理を投げるだけのものです。したがって DLL の置かれたディレクトリにパスさえ通っていれば、perl.exe はどこに置かれていても問題ありません。この特性(?)を利用します。

 メリットは、ファイル一つをコピーするだけで、どこにでも移動できる点、X:\usr\bin 以下のディレクトリに Perl 以外の物を放り込める点などです。デメリットは、Perl のバージョンが変わると、コピーした perl.exe も忘れずに更新しないと動かなくなる点です*3

この記事を Delicious に追加する   このエントリーをはてなブックマークに追加  

  1. *1 X: は XAMPP が配置されたドライブ レター
  2. *2 ショートカットはファイル名末尾に .lnk という見えない拡張子が付くため
  3. *3 perl.exe の呼び出す DLL 名が変わっているため

この記事を読んだ人はこんな記事も読んでいます記事リコメンデーションについて

カバー画像:Windows PC で Wii リモコンを使う

関連記事/トラックバック

関連記事/トラックバックはまだありません

この記事にトラックバックを送るには?

コメントを投稿する

 
 (必須, 匿名可, 公開, トリップが使えます)
 (必須, 匿名可, 非公開, Gravatar に対応しています)
 (必須)
スパム コメント防止のため「投稿確認」欄に ランダムな数字 CAPTCHAについて を入力してから送信してください。お手数ですがご協力のほど宜しくお願いいたします。