• ベストアンサー

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

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

  • Perl
  • 回答数5
  • ありがとう数4

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

  • ベストアンサー
  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

"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
質問者

お礼

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ドライブ直下にインストールし直しました。) 本当にありがとうございました!

その他の回答 (4)

  • teapots08
  • ベストアンサー率52% (32/61)
回答No.5

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

manmaru888
質問者

お礼

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

  • pick52
  • ベストアンサー率35% (166/466)
回答No.4

あ、実行するのは 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
質問者

お礼

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

  • pick52
  • ベストアンサー率35% (166/466)
回答No.3

例えば 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)
回答No.1

無いね。 あれこれ方法は無いわけじゃないけど そんなラクチンを実現できる物は………作るしか。 例えば、cgiアップ用のscriptを作って、そのuploaderは1行目を確認して書き換える動作をし、特定の場所へ転送…のようなもの。 あまり美しいやりかたじゃないけどね。

manmaru888
質問者

お礼

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

関連するQ&A

  • Perlのパス

    レンタルサーバーのCGIの説明で、「1.perl のパスは、/usr/bin/perl です。2.プログラムの先頭の記述は必ず、#!/usr/bin/perl となります。」って書いてあるんですけど、これを使用する場合、 http://www.kent-web.com/data/cart.html たぶん、admin.cgi , cart.cgi , order.cgi を エディタ で開いて以下の箇所をあたまの部分、#!/usr/bin/perl を変えればいいんですかね?それで1.の/usr/bin/perl は何処に書くのかな?それとも説明 の前置きですかね?「1.perl のパスは、」という意味はリンクがこうなるよ!って意味ですかね? ただま、KENT WEBみながら苦戦してます。 シロウトですいません。

    • ベストアンサー
    • Perl
  • windows環境でのperlのパス

    以下の環境で開発をしています。 OS: windows XP ActivePerl 5.8.8 apache 2.0.64 レンタルサーバで利用しやすいようにperlスクリプトの第1行目に #!/usr/bin/perl を記述していますが、ActivePerl のありどころが C:\dev\perl\bin\なので第1行目を #!/dev/perl/bin/perl  にしなければなりません。 #!/usr/bin/perlの記述をそのまま使う為に巷でよく言われているようなwindowsのジャンクション機能を利用しています。 Cドライブ直下に「usr」ホルダを作り、ここにC:\dev\perl\bin\のジャンクションを設定しました。 するとC:\usr\を覗くとbin\が存在します。つまりC:\dev\perl\bin\はC:\usr\bin\でアクセスできるようになります。 しかしこの状態で#!/usr/bin/perlの記述をそのまま使うと500エラーが出ます。 これ以外に何か良い方法はございませんでしょうか? また同じような開発環境の皆様はperlスクリプトの第1行目をどのように対策されていますでしょうか? 宜しく御教授お願いいたします。

    • ベストアンサー
    • Perl
  • PERL 宣言文 -wについて

    Perl初心者のWEBサーバエンジニアです。 サーバの移行に伴ってCGIファイルが動作していないため、ご相談になります。 【サーバ環境】 perl実行パス      /usr/local/bin/perl シンボリックリンク   /usr/bin/perl => /usr/local/bin/perl ソース記述       #!/usr/bin/perl ヴァージョン      5.8.5 perl実行環境      http://△△△.jp/cgi-bin/ ※apacheのスクリプトエイリアス指定 options +ExecCGI -Include SetHandler cgi-script 上記の環境で、cgiファイルが500internalサーバエラーになる現象が発生しています。 ファイルは以前動作したサーバから引っ張ってきました。 原因を探っていたのですが、cgiファイルのソース記述を #!/usr/bin/perl -w と記述を変更すると正常に動作しました。 -w について 【1度しか出現しない識別子や、初期化されずに参照される変数など、危険、無駄と思われる処理の警告を出力します。実際にはもっとたくさんの種類のチェックをするようです。】 と言う事はわかりましたが、いままで、-wなしで動作していたので、-wなしで動くよう、perlの設定を変更したいとかんがえております。 なにぶんPERL初心者ですので、同様の事象で知見がある方、ご教授を宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • CGIのパス(Apache winで)

    初歩的な質問ですみません。 環境 windows2000 サーバー Apache/1.3.20 ActivePerl-5.6.1.626 をインストールが完了して、CGIを動作させようとしています。 ApacheでのHTML動作はできています。 CGIプログラムの一行目に #!/usr/local/bin/perl と記載されています。 その文字列を #!c:/bin/perl.exe に変更して現在動作させています。 しかし、ISPのHPスペースのperlへのパスは #!/usr/local/bin/perl なので、転送前に一行目を変更しています。 変更しなくても良いように ApacheでのCGIのパスを #!/usr/local/bin/perl で動作する方法を どなたか教えていただけないでしょうか? ちなみに Perlは[c:\bin]にインストールしてあります。 Apacheは[g:\apache]にインストールしてあります。

  • CGI Perlについて

    低レベルな質問で恐れ入ります。 Perlのパスがサーバーのサイトで …/usr/local/bin/perl となっているのですが #!…/usr/local/bin/perl でしょうか? #!/usr/local/bin/perl でしょうか?

  • perlパス

    Windows2000機でWebServerを建てたのですが、CGIが認識しません。 WEBサーバーのクライアントソフトはApacheで 普通にHTMLは見れています。 perlをインストールした場所は C:\usr\local で VerはActivePerl 5.8.8.822 for Windows (x86)です。 場所は↑なのでCGIファイルのperlのパスはそのままいじらず、 perlのパスは#!/usr/local/bin/perl です。 一応#!C:/~以下   もやりましたがだめで、 CGIのテキストが表示されています。 色々調べてやったのですがどうもうまくいかず 教えていただけませんか

  • perlのcgiが動かない・・・

    cgiを組もうと思い、まずは簡単なもので試そうと思ったのですが、 うまくいかず困っています。 ↓プログラムは、こんな感じです。 ファイル名:index.cgi #!/usr/bin/perl print "<html>"; print "<body>"; print "abc"; print "</body>"; print "</html>"; <やってみたこと> ・Perlのパス「#!/usr/bin/perl」 が間違っていないか? which perl で /usr/bin/perl とでます。 ・Apache の設定が正しく行なわれているか? http://localhost でindex.htmlがきちんと表示できています。 ・「hello.cgi」 の設置場所を間違っていないか? プログラムソースが出るということは、 間違っていないのではないでしょうか? ・ためしに実行してみた TELNETで ./index.cgi <html><body>abc</body></html> とでてきました。 これはちゃんと動いているのでは?? 何か勘違いしていますか? お気づきの点を教えてください。よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • パス??

    BIGLOBEで自作HPをつくっています。CGIのサンプル集を買ってきて、とりあえず適当なモノをUPしてみました。 アクセス権の変更など一通りの事はBIGLOBEの規格に合わせたのですが、forbidden となります。 パス一覧にサンプルCGIの /usr/bin/perl ↑というのが無く /usr/local/bin/perl なら使えるそうなので強引に /local を外してUPしましたが、やはりうまく作動しません。 どうしたら良いのでしょうか? そもそもパスってなんなのでしょうか? ご教授の程、宜しくお願いいたします。

    • ベストアンサー
    • CGI
  • Perlの初歩の初歩の初歩(#!/usr/local/bin/perlについて)

    いつもお世話になっています。 Perlを勉強し始めて1か月たっていない人間です。 調べてもよく分からず、気持ち悪いので どうか教えてください。 Perlで記述するとき1行目にperlへのパスを書きますが プロバイダでのパスは「#!/usr/local/bin/perl」です。 私のPC環境では「#!d:/perl/bin/perl」になります。 ある日、PC環境で動作検証するとき 間違ってプロバイダのパスのほうを記述してしまいました。 しかし、それでもPC上で動作しました。 なぜパスが違うのに動作するのでしょうか? なお、わけの分からないまま 「Perlへのパスを通す」というのを昔 やったことがあります。関係がありますか? ある場合、それをすると 「#!d:/perl/bin/perl」の「d:/perl/」の部分が 「/usr/local/」と同になるということなのでしょうか?

    • ベストアンサー
    • CGI
  • CGIのperlを確認するには??(CATV)

    こんばんわ。 いつもお世話になっています。 ホームページでメールを自動返信するCGIを設置したいのですが毎回 【一行目のperlのパスを自分の環境に合わせて書き直します。   大抵は、「#!/usr/bin/perl」 か 「#!/usr/local/bin/perl」です。   解らない場合はサーバー管理者(もしくはプロバイダー)に確認してください。】 という壁にぶちあたります。 インターネットはCATV(中部ケーブルネットワーク)を使っています。 どのように乗り切ればよろしいでしょうか? 宜しくお願いします。。。

専門家に質問してみよう