从windows中的perl脚本运行perl -e

时间:2010-08-16 13:46:37

标签: windows perl

我需要在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(即不在文件中),它可以很好地工作。

5 个答案:

答案 0 :(得分:4)

test.pl文件应包含:

print qq(Hello);

答案 1 :(得分:2)

为什么要使用perl -e …运行perl代码?只需将实际代码放入您的程序中即可。

另一方面,如果要从程序中运行外部命令,则答案取决于您要对程序的输入/输出和/或退出代码执行的操作。请查看systemqxopen

答案 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