2011-10-13 23 views
12

我試圖運行與5.14.2當我嘗試在Windows上運行Perl單行程時,爲什麼我會在「-e行1」的EOF之前的任意位置出現「找不到字符串終止符」'「?

C:\Perl>perl -e 'print "Hello World \n"' 
Can't find string terminator "'" anywhere before EOF at -e line 1.

我缺少的是在Windows下?

+0

如果你正在使用perl的5.10+,使用'-E'選項而不是'-e',它打開了新的功能,其中'say'是'print',但是在最後有一個隱含的換行符。'perl -E'說'hello world'「' –

+0

它沒有' (不知道這是否適用於你...) – Apostolos

回答

25

你錯過了一個體面的shell,有明確的引用規則。在Windows上,只有雙引號被認爲是一個引號,而轉義規則定義不明確且不一致。嘗試:

perl -e "print qq{Hello World \n}" 

我強烈建議避免任何東西,但最簡單的Windows上的一行。 (Windows單行程的另一個問題是Windows外殼不能擴展通配符,如果你在命令行上使用*.txt,它會尋找一個名字爲*.txt的文件,稍後會遇到這種情況。)

在Windows上,你鍵入的內容等同於:

perl -e "'print" "Hello World \n'" 

也就是說,Perl的正試圖執行的代碼'print包含單串Hello World \n'@ARGV。 (這不是一個新行,這是一個反斜槓,然後n)。

+3

其實,我認爲你是在誇大其詞,我從來沒有覺得自己過於殘廢在Windows中編寫單行代碼 – TLP

+1

在Windows中,它是應用程序的工作(而不是shell的工作)來解析命令行。 OP的問題在我看來好像它代表了Windows版本Perl中的錯誤? –

+0

@HarryJohnston,它其實都是。首先,shell解析命令行(尋找管道,重定向等)。然後,應用程序解析命令行。 (通常,它實際上是解析它的應用程序的C/C++運行時庫)。這就是Windows命令行如此混亂的原因;解析規則沒有很好的定義,不同的C庫分析的東西略有不同。 – cjm

4

在Windows上,引號應顛倒過來。因此,而不是:

C:\Perl>perl -e 'print "Hello World \n"' 

它應該是:

C:\Perl>perl -e "print 'Hello World \n'" 

(歸屬Learning Perl,第6版,第295)。

+1

這將打印出「Hello World \ n」,\ n打印原樣而不是新隊。 – rodee

2

我也發現了這個工作。我使用的是Windows 7中使用c:\Windows\system32\cmd.exe

perl -e "$a=2; print(\"$a \n \");" 

我用我的print語句逃生斜線去出現\引號」

相關問題