1

我有一个生成 HTML 报告的 perl 代码。程序执行结束后,我想启动 html 文件浏览器。

for (i<0; $i<$#files; $i++) {

   if (condition is met) {

       &sub_pass(prints to html file)

   }
   else {
       &sub_fail(prints to html file)
   }

 }

  my @url_report = "C://path/to/htmlfile/";
  system("explorer @url_report");

但这不会启动 html 文件,我想要。当我在 for 循环之前调用 System 函数时,它成功打开了文件。任何原因或解决方案,我怎样才能使它起作用?

4

3 回答 3

4

explorer是一个 Windows 程序,对于你使用的路径分隔符,它不像 Perl 那样宽容。也就是说,您需要使用反斜杠。

my $url_report = "C:\\path\\to\\htmlfile\\";
system("explorer $url_report");
于 2013-06-17T21:19:16.460 回答
2

这里的变量url_report是一个数组,而不是一个标量:

my @url_report = "C://path/to/htmlfile/";
system("explorer @url_report");

您可以尝试将其从数组更改为标量,还可以利用从以下位置检索错误消息的功能system()

my $url_report = "C://path/to/htmlfile/";
system("explorer $url_report") == 0 or die "could not open file: $url_report ($?)";

更详细的错误消息将帮助您进一步排除故障。

于 2013-06-17T21:10:29.413 回答
0
"C://Users/path/output.html/"

应该

"C:\\Users\\path\\output.html"

虽然它可能explorer接受以下内容(因为内核这样做):

"C:/Users/path/output.html"

如果您使用用户选择的浏览器会更好:

my $url_report = "C:\\Users\\path\\output.html";
system(qq{start "" "$url_report"});
于 2013-06-17T23:09:56.543 回答