• ベストアンサー

perlの起動法

perl起動法について質問なのですが、 perlでファイルを作り、一番上に#!/usr/bin/perlと書いて、perl.plという名前で保存しました。 ターミナルで$chmod 755 perl.pl $./perl.pl とコマンドをうったのですが、print文で書いたhello worldというが表示されません。 でもperl perl.plとコマンドを打つと実行されます。 一体この違いはなんなのでしょうか?学校の課題で、どうしても./perl.plとして実行させなければならないので是非解答お願いします。

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

  • ベストアンサー
回答No.3

$./perl.pl   <=何も出ない(最近のcsh系だとそのようです)  次に  $ bash ./perl.pl  <=と打ってみてください  command not found <=と表示されるかと思います  これはUnix系の場合 名前が違っているか 又は   #!/usr/bin/perl (shebangと言います)で指定したコマンドのパスが間違えているとそうなりますが   補足を見ると合っているようなので別のケースです  では 次に $ od -c perl.pl <=と打ってください 0000000 # ! / u s r / b i n / p e r l 0000020 ¥r ¥n p r i n t " H e l l o 0000040 W o r l d ¥ n " ; 0000051 このように / u s r / b i n / p e r l に続けて ¥r ¥n が表示されませんか? (端末の画面上は¥ではなく/の逆向き 日本語環境だと ¥r ¥n となる  ) ここは ¥r が有ってはまずいのです ¥n だけでないと perl ./perl.pl は動くが ./perl.pl は動きません 学校の課題ならば あとはご自分で調べてください。 

hullhouse
質問者

お礼

解決しました。どうやら/usr/bin/perlのあとに\rが表示されていたのが原因だったようです。

その他の回答 (5)

回答No.6

#5さん >何かどうも変なんですが いや、だから shebang行の末尾に CR+LFなのだと思いますよ 質問文や #1さんへの補足に書いた内容に間違いが無ければと言う 前提でですが

  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.5

何かどうも変なんですが chmodコマンドは正常に効いているのでしょうか。 ls -l perl.plで属性に実行権限がついているか確認してみてください。 あとは環境がわからないのでどうしてもさまざまなケースを想定した推測の域を出ないのです。 ・setコマンドで環境変数のパスなどはどうなっているのか ・/usr/bin/perlのファイル情報 ・実行環境のシェルやOSそして端末に関する情報 これらの環境に関する情報の提示を差し支えのない範囲でお願いいたします。

回答No.4

#2 さん (質問者さんにも参考になると思いますが) >もし、$ ./perl.plで実行できた時にはその方法をおしえて頂きたいです! #3でも触れていますが shebang で検索してみてください コマンド/ツールが全てコンパイルされたプログラムだと思ってらっしゃるわけですか? 少なくともLinuxでは /usr/bin/ 以下にたくさんのコマンド/ツールが有りますが 3KB程度以下のものはほとんどが shやperlのスクリプトです 例えば ptar などもそうです $ which ptar  /usr/bin/ptar  ←ptarのパス $ cat /usr/bin/ptar  ↓以下ptarの中身 #!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if 0; # not running under some shell 以下略

  • Tinte
  • ベストアンサー率45% (27/60)
回答No.2

 その学校の課題はひっかけ問題なのかもしれませんよ!  hullhouseさんの質問の文脈からすると、端末からperlを実行しているのだと思いますが、私が知っている限りではPerl専用の端末というのを見たことがないので、UNIX系の端末で通常シェルなどで使っている端末で…という話でお答えすることができると思います。  結果からいうと、$./perl.plは、何も実行されない筈です。なぜなら、そこにコマンドが何もないからです。通常は、<あるコマンド> <あるスクリプトの書かれたファイルパス>というような感じで実行されます。稀にその逆もあって、例えば $ /etc/rc.d/init.d/httpd restart などは、ファイルバスが先に来ていますが、いずれにしろコマンドに似たrestartがあります。 $./perl.plの場合は、カレントディレクトリ内のperl.plというファイルを指しているだけで「何も命令」していないんですね。  よほど特別なことがないかぎり、命令(コマンド)がある筈です。  hullhouseさんの文章を読んでみて、もしかしたら学校が出した引っかけ問題なのかな?とちょっと思いました。 $perl perl.pl あるいは、 $perl ./perl.pl が実行されるのは、perlという命令文(コマンド)があって、「perlで実行しなさい!」と言っているのでちゃんと実行されます。  もし、$ ./perl.plのみで実行できる…としたら、perlのスクリプトやまたファイルパーミッションという問題ではなく、開発環境の設定の課題である…ということだと思います。    もしかしたら、perl.plに何かを書き込むことで$ ./perl.plが実行されるのかもわかりませんが…。。。私もそのようなことを今まで考えたことがないので参考程度にしか答えられないのですが、もし、$ ./perl.plで実行できた時にはその方法をおしえて頂きたいです!  

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

その perl.pl の中身は? ./perl.pl と実行したときに, 何かメッセージは出ませんでしたか? which perl の結果は?

hullhouse
質問者

補足

perlの中身は#!/usr/bin/perl print "hello world\n"; です。 ./perl/plとうった時は何も表示されません。 which perlとコマンドを打ったときは/usr/bin/perlと出ます。