- ベストアンサー
Perlの実行パスを自動で変更する方法はありませんか?
Perlで1行目に書く実行パスを自動で変更することはできないでしょうか? 例えば、自分のPCで動かす場合は、 #!c:/Program Files/Perl/bin/perl を有効にし、 ソースをそのままサーバにアップしたら、 #!/usr/bin/perl に切り替わるような記述法があれば、教えて頂けないでしょうか。 宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
"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/
その他の回答 (4)
- teapots08
- ベストアンサー率52% (32/61)
自分は C:\usr\bin に、 「perl.exe」と「perl58.dll」をコピーしたら、 #!/usr/bin/perl のままで使えています。 (どうしてこんな方法で使えるかは不明です。) Apacheはxamppのものをつかっています。
お礼
teapots08さん。回答ありがとうございます。 試してみたのですが、xamppではなく、Apacheのみの環境のためかうまくいきませんでした。 でも、ありがとうございました。
- pick52
- ベストアンサー率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 になるはずですが...)
お礼
pick52さん。回答ありがとうございます。 No.2のjjon-comさんから頂いた回答で解決できました。 でも、今後のために勉強になりました。 Perlもパスにスペースを含まないようDドライブ直下にインストールし直しました。 ありがとうございました。
- pick52
- ベストアンサー率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 を呼び出す前にカレントディレクトリを変更してください。
- SAYKA
- ベストアンサー率34% (944/2776)
無いね。 あれこれ方法は無いわけじゃないけど そんなラクチンを実現できる物は………作るしか。 例えば、cgiアップ用のscriptを作って、そのuploaderは1行目を確認して書き換える動作をし、特定の場所へ転送…のようなもの。 あまり美しいやりかたじゃないけどね。
お礼
SAYKAさん。回答ありがとうございます。 また何かありましたら、宜しくお願い致します。
お礼
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ドライブ直下にインストールし直しました。) 本当にありがとうございました!