我需要在Windows中的Perl脚本中运行以下命令。代码不能比这简单:
#! 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 :(得分:4)
test.pl
文件应包含:
print qq(Hello);
答案 1 :(得分:2)
为什么要使用perl -e …
运行perl代码?只需将实际代码放入您的程序中即可。
另一方面,如果要从程序中运行外部命令,则答案取决于您要对程序的输入/输出和/或退出代码执行的操作。请查看system,qx和open。
答案 2 :(得分:2)
要从Perl程序运行另一个程序,请使用具有良好功能的system
运算符来绕过命令shell的参数解析。
如果LIST中有多个参数,或者LIST是一个具有多个值的数组,则使用列表其余部分给出的参数启动列表第一个元素给出的程序。如果只有一个标量参数,则检查参数是否为shell元字符,如果有,则将整个参数传递给系统的命令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
一样,打开指定为多元素列表的命令会绕过shell。
答案 3 :(得分:1)
我不知道你为什么需要它,但是:
#!C:\Perl\bin\perl
`perl -e "print qq(Hello)"`;
答案 4 :(得分:0)
为什么不使用eval?