• ベストアンサー

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/」と同になるということなのでしょうか?

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

httpdの種類や設定によっては1行目のパスを無視して動作させることが出来ます。 例えばAnHTTPDは最初からcgiの拡張子とperlを関連付けて使う仕様だった気がします。 Apache1.3(Win)もWindowsのOSでcgi拡張子とPerl.exeの関連付けがしてあれば動作させることが出来ます。

JumpingQueen
質問者

お礼

ご回答ありがとうございました。 4番さんにまとめさせてください。

その他の回答 (3)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

activeStateでインストールすると 拡張子の割り当てがされて、 Perl cgi.pl とかしないでも cgi.pl とするだけで実行できます。 だから #!の行は単に無視されて実行されているのではないでしょうか? #!の行を削除してみて、実行されるようであればそういうことじゃないかと思います。

JumpingQueen
質問者

お礼

みなさん、ご回答ありがとうございました。 まとめさせていただく失礼をお許しください。 なるほど、ほかの設定によっては、このパス記述は まったく意味がなくなるってことですか。 4番さんのおっしゃるように1行目の記述を 削ってみても問題なく動作しました。 私は質問末尾に書いたように 2つのパスが同じ意味を持つようになるのかなと思い そこら当たりの理屈はどうなっているんだろうと 悩んでいました。悩むだけばかだったみたいです(^-^)。 1日開けた後に締め切ります。 ありがとうごいざいました。 またどうぞよろしくおねがいいたします。

JumpingQueen
質問者

補足

みなさん、ありがとうございました。締め切ります。 ポイントは1番早く正解(と思われる回答)を 書いてくださったかたに20pt、 確信に至らせてくださったかたに10ptでご了承ください。 明日決めると、また違う結果になると思います(^-^)。 みなさまに感謝しております。

noname#198951
noname#198951
回答No.3

パスを通すと言うのは、もしその言語のプログラムの実行がされたときに どのディレクトリを見て実行ファイルを探すかということです。 パスを通したパソコン内ではperl(CGI)のプログラムを単に実行しようと しただけでパソコンが勝手にPerlの場所を見つけて実行しますので、間違った ディレクトリの指定がされていたけど、パスの方でperlを見つけたのでは ないでしょうか?

JumpingQueen
質問者

お礼

ご回答ありがとうございました。 4番さんにまとめさせてください。

  • rakujin
  • ベストアンサー率38% (34/89)
回答No.2

パスを通してあるのなら、perlと書くだけで、d:/perl/bin/perl ということになると思います。

JumpingQueen
質問者

お礼

ご回答ありがとうございました。 4番さんにまとめさせてください。

関連するQ&A