プロが教えるわが家の防犯対策術!

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

A 回答 (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/200 …

Windows版Apacheでshebang行を無視する設定
http://www.310f.com/exocet/hiki/
    • good
    • 0
この回答へのお礼

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

自分は


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

Apacheはxamppのものをつかっています。
    • good
    • 0
この回答へのお礼

teapots08さん。回答ありがとうございます。
試してみたのですが、xamppではなく、Apacheのみの環境のためかうまくいきませんでした。
でも、ありがとうございました。

お礼日時:2008/09/14 00:36

あ、実行するのは 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 になるはずですが...)
    • good
    • 0
この回答へのお礼

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

お礼日時:2008/09/14 00:34

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



#!/usr/bin/perl

require 'main.cgi';
1;

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

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

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

無いね。


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

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

SAYKAさん。回答ありがとうございます。
また何かありましたら、宜しくお願い致します。

お礼日時:2008/09/14 00:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!