• ベストアンサー
  • 困ってます

Perlの実行パスを自動で変更する方法はありませんか?

  • 質問No.4323948
  • 閲覧数357
  • ありがとう数4
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 80% (4/5)

Perlで1行目に書く実行パスを自動で変更することはできないでしょうか?
例えば、自分のPCで動かす場合は、
#!c:/Program Files/Perl/bin/perl
を有効にし、
ソースをそのままサーバにアップしたら、
#!/usr/bin/perl
に切り替わるような記述法があれば、教えて頂けないでしょうか。
宜しくお願い致します。

質問者が選んだベストアンサー

  • 回答No.2
  • ベストアンサー

ベストアンサー率 61% (1597/2589)

"c:/Program Files"ということは,Windows OSで ActivePerlあたりを使っているということでしょうか。

Windowsであるなら基本的にshebang行は無視して,PATH環境変数を参照することで実行プログラム perl.exe を探しに行くんじゃないですか。1行目が "#!/usr/bin/perl" のままだとWindowsでは実行できなかったというのは確認した事実ですか?

shebangとは
http://www2.u-netsurf.ne.jp/~alt/mt/archives/20031116_1651.html

Windows版Apacheでshebang行を無視する設定
http://www.310f.com/exocet/hiki/
お礼コメント
manmaru888

お礼率 80% (4/5)

jjon-comさん。回答ありがとうございます。
Apache2なので、shebang行は無視されないようですが、
> Windows版Apacheでshebang行を無視する設定
​> http://www.310f.com/exocet/hiki/
を参考に、他にも調べてみて、できるようになりました!

以下のように、httpd.confに、ScriptInterpreterSource Registry-Strictを追加しました。
------------------------------------------------------
<Directory "D:/www/public_html">
Options FollowSymLinks ExecCGI
AllowOverride All
Order allow,deny
Allow from all
ScriptInterpreterSource Registry-Strict
</Directory>
------------------------------------------------------

それから、下の内容のxxx.regファイル作って、実行して、.cgiにperl.exeを関連付けました。
------------------------------------------------------
Windows Registry Editor Version 5.00

[HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command]
@="D:\\perl\\bin\\perl.exe %1"
------------------------------------------------------
(OSがvistaで、レジストリエディタのバージョンを見たら6だったんですが、"Version 5.00"という記述でないと追加できませんでした。それと、perlをDドライブ直下にインストールし直しました。)

本当にありがとうございました!
投稿日時:2008/09/14 00:31

その他の回答 (全4件)

  • 回答No.5

ベストアンサー率 52% (32/61)

自分は
C:\usr\bin
に、
「perl.exe」と「perl58.dll」をコピーしたら、
#!/usr/bin/perl
のままで使えています。
(どうしてこんな方法で使えるかは不明です。)

Apacheはxamppのものをつかっています。
お礼コメント
manmaru888

お礼率 80% (4/5)

teapots08さん。回答ありがとうございます。
試してみたのですが、xamppではなく、Apacheのみの環境のためかうまくいきませんでした。
でも、ありがとうございました。
投稿日時:2008/09/14 00:36
  • 回答No.4

ベストアンサー率 35% (166/466)

あ、実行するのは index.cgi にしてください。

この場合はパーミッションの変更(実行権限を与える)の必要があるのは
index.cgi のみです。
main.cgi は require で読み込んでいるだけですのでパーミッションの
変更は不要になります。
一式をサーバにアップした後に編集や更新するのは main.cgi のみで
済みます。
サーバ側は

#!/usr/bin/perl

として、ローカル側は

#!c:/Program Files/Perl/bin/perl

とすればいいでしょう。

名前などは適宜読み替えてください。
(CGIファイルが複数ある場合も)

ところでPerlをスペースを含むパスにインストールするのは誤動作の
原因になるような気が。
(デフォルトは C:/Perl/bin/perl.exe になるはずですが...)
お礼コメント
manmaru888

お礼率 80% (4/5)

pick52さん。回答ありがとうございます。
No.2のjjon-comさんから頂いた回答で解決できました。
でも、今後のために勉強になりました。
Perlもパスにスペースを含まないようDドライブ直下にインストールし直しました。
ありがとうございました。
投稿日時:2008/09/14 00:34
  • 回答No.3

ベストアンサー率 35% (166/466)

例えば index.cgi というファイルを作成し中身は

#!/usr/bin/perl

require 'main.cgi';
1;

として、本体を main.cgi に記述すれば index.cgi は編集しなくても
済みます。
(本体スクリプトの最後行で 1; を忘れないように)

なお、通常のWinサーバではPerlパスは特に指定しなくても
環境変数PATHに設定しパスが通してあってサーバ側でも正常に設定して
いれば動作しますがApacheサーバの場合は正確に指定しないと
パーミッションエラーがでる場合があるようですね。
(Apache以外のサーバでは問題なく動作する場合が多いと思います)

サーバ(IISなど)によってはCGIの実行ディレクトリ(ファイルのある
ディレクトリ)がカレントディレクトリにならない場合があります。
その場合は仮想パスを指定してやるか、絶対パスで指定するか
main.cgi を呼び出す前にカレントディレクトリを変更してください。
  • 回答No.1

ベストアンサー率 34% (944/2776)

無いね。
あれこれ方法は無いわけじゃないけど そんなラクチンを実現できる物は………作るしか。

例えば、cgiアップ用のscriptを作って、そのuploaderは1行目を確認して書き換える動作をし、特定の場所へ転送…のようなもの。
あまり美しいやりかたじゃないけどね。
お礼コメント
manmaru888

お礼率 80% (4/5)

SAYKAさん。回答ありがとうございます。
また何かありましたら、宜しくお願い致します。
投稿日時:2008/09/14 00:17
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ