- ベストアンサー
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/」と同になるということなのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
httpdの種類や設定によっては1行目のパスを無視して動作させることが出来ます。 例えばAnHTTPDは最初からcgiの拡張子とperlを関連付けて使う仕様だった気がします。 Apache1.3(Win)もWindowsのOSでcgi拡張子とPerl.exeの関連付けがしてあれば動作させることが出来ます。
その他の回答 (3)
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
activeStateでインストールすると 拡張子の割り当てがされて、 Perl cgi.pl とかしないでも cgi.pl とするだけで実行できます。 だから #!の行は単に無視されて実行されているのではないでしょうか? #!の行を削除してみて、実行されるようであればそういうことじゃないかと思います。
お礼
みなさん、ご回答ありがとうございました。 まとめさせていただく失礼をお許しください。 なるほど、ほかの設定によっては、このパス記述は まったく意味がなくなるってことですか。 4番さんのおっしゃるように1行目の記述を 削ってみても問題なく動作しました。 私は質問末尾に書いたように 2つのパスが同じ意味を持つようになるのかなと思い そこら当たりの理屈はどうなっているんだろうと 悩んでいました。悩むだけばかだったみたいです(^-^)。 1日開けた後に締め切ります。 ありがとうごいざいました。 またどうぞよろしくおねがいいたします。
補足
みなさん、ありがとうございました。締め切ります。 ポイントは1番早く正解(と思われる回答)を 書いてくださったかたに20pt、 確信に至らせてくださったかたに10ptでご了承ください。 明日決めると、また違う結果になると思います(^-^)。 みなさまに感謝しております。
パスを通すと言うのは、もしその言語のプログラムの実行がされたときに どのディレクトリを見て実行ファイルを探すかということです。 パスを通したパソコン内ではperl(CGI)のプログラムを単に実行しようと しただけでパソコンが勝手にPerlの場所を見つけて実行しますので、間違った ディレクトリの指定がされていたけど、パスの方でperlを見つけたのでは ないでしょうか?
お礼
ご回答ありがとうございました。 4番さんにまとめさせてください。
- rakujin
- ベストアンサー率38% (34/89)
パスを通してあるのなら、perlと書くだけで、d:/perl/bin/perl ということになると思います。
お礼
ご回答ありがとうございました。 4番さんにまとめさせてください。
お礼
ご回答ありがとうございました。 4番さんにまとめさせてください。