perl -e 'print "Hello world!!\n";'を成功させるには?

[上に] [前に] [次に]
経験0時間者 1999/12/01(水) 11:12:24
ほんとにつまらない質問なんですが、Perl入門の引数指定のところにかいてあった、コマンドプロンプト
から perl -e 'print "Hello world!!\n";'というのを打ってみたんですが、次のようなエラーメッセージが
表示されました。
Can't find string terminator "'"anywhere before EOF at -e line 1

これはどういう意味で、何故このようなメッセージが出てしまうのでしょうか。。。
本当につまらない質問ですいません。

いそぎんちゃく 1999/12/01(水) 11:29:21
Can't find string terminator "'"anywhere before EOF at -e line 1

は、

「'」が見つかりませんよ

という意味です。つまり、最初の「'」だけあって、最後の「'」がないよ と言っています。

でも、最後の「'」はあるのに??と思うでしょう。
それは、こういうわけがあります。

文の中に「!!」を使っていますが、これは「直前のコマンドを再投入」という意味になってしまいます。というわけで、その部分が直前のコマンドに置きかえられ、しかもその後ろの「\n";'」は無視されてしまうので、該当のようなエラーが出てしまうわけです。

試しに
perl -e 'print "Hello world\n";'
とやればOKになりました。

いそぎんちゃく 1999/12/01(水) 11:34:20
というわけで、どうしても「Hello World!!」
と出力したいのなら

perl -e 'print "Hello world\!\!\n";'

とやりましょう。

hiro-kim 1999/12/01(水) 15:14:17
>これはどういう意味で

と問われたら,terminator なり EOF なりを英和辞書で調べてみてください,と答えるかなあ。
プログラム言語に関わっていく上で,いつでも付きまとう英単語ですから。

B-Cus 1999/12/01(水) 15:19:02
補足しておきますが、!! 置換はシェルの機能であって、
perl とは *何の関係もありません*。

sh・bash だと '' の中のヒストリ置換は行なわないよね。
csh・tcsh のヤなところ。

ところで、DOS プロンプトでも !! ってあるんですか?

オイラリー 1999/12/01(水) 15:29:54
>Can't find string terminator "'"anywhere before EOF at -e line 1
>これはどういう意味で、何故このようなメッセージが出てしまうのでしょうか。。。
エラーメッセージの和訳が、ラクダ本の9章に載ってますよ(^。^)

いそぎんちゃく 1999/12/01(水) 15:30:42
>ところで、DOS プロンプトでも !! ってあるんですか?

ワタシは、社内サーバをTelnetでつないで実験しました。
たしかに、DOSプロンプトだと !! って、ただのエラーですね。

ふじ 1999/12/01(水) 16:09:22
DOS プロンプトだと、引数を '' で括ることができません。

なので、
>perl -e 'print "Hello world!!\n";'
perl -e "print \"Hello world!!\n\";"
こうしないとダメなんです。

[上に] [前に] [次に]