4

我正在尝试从 perl 程序执行系统命令。

除非我提供路径,否则它工作正常,当它说“系统找不到指定的路径”时。

我使用 exec()、system() 或反引号得到相同的结果。

我将命令字符串直接作为参数得到相同的结果,或者将其放在单引号或双引号字符串中并将字符串作为参数传递。

如果我从 perl 脚本中复制一个不起作用的命令并将其粘贴到 DOS 框中,它会起作用,反之亦然。

例如,

print `cd`;

工作正常,但是

print `cd \`;

print `cd ..`;

给我同样的错误信息。

$cmd = 'foo.htm'; $ret=`$cmd`

启动浏览器,但是

$cmd = '\foo.htm'; $ret=`$cmd`;

才不是。

有人对问题可能是什么有任何建议吗?

4

1 回答 1

3

如果您向我们提供您的系统命令是什么以及您得到了什么,那将会很有帮助。很难说你的错误是什么。不过,我猜猜。。

如果您在 Windows 上,并且正在执行\,则必须了解反斜杠字符是 Perl 上的特殊引号字符。要使用真正的反斜杠,您需要将其加倍:

 system ("C:\\Program Files (x86)"\\Microsoft Office\\Word.exe");

或者,更好的是,使用Perl 附带的File::Spec模块。这将保证您制作正确的路径结构:

use File::Spec::Functions;

my $executable = catfile("C:", "Program Files (X86)",
      "Microsoft Office", "Word.exe");
system ($executable);

当然,你应该尝试捕获system命令的输出,看看是否有任何错误:

my $error = system($executable);
if ($error) {
      if ($? == -1) {
          print "Program failed to execute\n";
      }
      else {
          my $signal = ($? & 127);
          my $exit_code = ($? >> 8);
          print "Error: Signal = $signal  Exit Code = $exit_code\n";
      }
}
于 2012-07-18T00:41:09.670 回答