2010-08-16 66 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,打开指定为多元素列表命令绕过外壳。