Perl系统调用无法识别路径

4
我正在尝试从Perl程序中执行系统命令。它可以正常工作,除非我提供路径,否则会显示“系统找不到指定的路径”。使用exec(),system()或反引号都会得到相同的结果。如果将命令字符串直接作为参数传递,或者将其放入单引号或双引号字符串中并将字符串作为参数传递,也会得到相同的结果。如果我将不起作用的命令从Perl脚本复制并粘贴到DOS框中,则可以正常工作,反之亦然。例如:
print `cd`;

功能正常,但是

print `cd \`;

并且

print `cd ..`;

给我相同的错误信息。

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

启动浏览器,但是

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

不行。

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

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";
      }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接