我需要在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
(即不在文件内部),效果很好。
test.pl
文件应该包含:
print qq(Hello);
你为什么要用perl -e …
运行perl代码? 只需把你的程序中的实际代码。
另一方面,如果你想从你的程序中运行一个外部命令,那么答案取决于你想要怎样处理程序的输入/输出和/或退出代码。 看看系统 , qx并打开 。
要从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
,打开指定为多元素列表的命令将跳过shell。
我不知道你为什么需要它,但是:
#!C:\Perl\bin\perl `perl -e "print qq(Hello)"`;
为什么不使用eval ?