2010-08-16 25 views
3

我需要在Windows中的Perl腳本中運行以下命令。代碼不能簡單:從窗口內perl腳本運行perl -e

#! C:\Perl\bin\perl 

perl -e "print qq(Hello)"; 

我將該文件保存爲test.pl。我在Windows中打開命令提示符並從c:\Per\bin目錄運行以下命令。當我運行它爲perl test.pl,我得到以下結果:

C:\Perl\bin>perl test.pl 
syntax error at test.pl line 3, near ""perl -e "print" 
Execution of test.pl aborted due to compilation errors. 

我該如何解決這個問題?如果我從命令提示符(即不在文件內)運行perl -e,它的效果很好。

+0

如果你通過perl運行腳本(如錯誤所示),'perl'不是Perl知道的命令。它也告訴你這一點。你可能在'-e'中做什麼,你不能在腳本中做?!?!它在命令行上運行良好的原因是操作系統認爲'perl'是一個「命令」,如果它可以在PATH中找到它的話。並且'perl -e'預計會從命令行「運行得很好」 - 與perl不同。根據OP要輸出的位置,可以使用' – Axeman 2010-08-17 14:06:39

回答

4

test.pl文件應包含:

print qq(Hello); 
0

爲什麼不使用eval

1

我不知道爲什麼你需要它,但:

#!C:\Perl\bin\perl 

`perl -e "print qq(Hello)"`; 
+0

'或'system perl => -e => qq {「print qq(Hello)」}。 – 2010-08-16 14:13:09

2

你爲什麼要與perl -e …運行Perl代碼?只需將實際代碼放入程序中。

另一方面,如果您想從程序中運行外部命令,則答案取決於您想要對輸入/輸出和/或程序的退出代碼執行什麼操作。看看system,qxopen

2

要從Perl程序運行另一個程序,請使用system運算符,該運算符具有很好的功能,可繞過命令shell的參數分析。

如果在LIST中有多個參數,或者如果LIST是一個具有多個值的數組,則啓動列表的第一個元素給出的程序,該列表的第一個元素由列表的其餘部分給出。如果只有一個標量參數,該參數檢查shell元字符,如果有的話,整個參數傳遞給解析系統的命令外殼...

例如:

#! perl 

system("perl", "-le", "print qq(Hello)") == 0 
    or warn "$0: perl exited " . ($? >> 8); 

請記住,system運行該命令時其輸出將轉至標準輸出。如果你想捕捉的輸出,這樣做在

open my $fh, "-|", "perl", "-le", "print qq(Hello)" 
    or die "$0: could not start perl: $!"; 

while (<$fh>) { 
    print "got: $_"; 
} 

close $fh or warn "$0: close: $!"; 

system,打開指定爲多元素列表命令繞過外殼。