为什么Perl"系统('某些命令')"行为与c:\>不同一些命令?

时间:2016-07-12 08:27:10

标签: perl cmd spawn

在我的(cmd.exe' s)中,当前工作目录是名为 libre-office-document.odt 的文件。我可以使用start命令打开此文档而不会出现问题:

c:\path\to\> start libre-office-document.odt

然而,如果我使用以下简单的Perl脚本

use warnings;
use strict;

print system("start libre-office-document.odt")

并在同一目录中执行它,我得到以下消息框:

  

LibreOffice 4.4 - 致命错误

     

无法启动应用程序   用户安装无法完成。

显然,使用Perl的system命令时,某些行为会有所不同。我无法确定这是什么以及如何使用system命令打开文档。

1 个答案:

答案 0 :(得分:1)

使用反引号捕获输出。 您可以使用assoc和ftype检查文件关联,然后对其进行硬编码,或尝试执行以下操作:

use strict;
use warnings;

my $assoc = `assoc .odt`;

# .odt=LibreOffice.WriterDocument.1
chomp $assoc;

$assoc =~ s/.*=//g;

my $ftype = `ftype $assoc`;

# LibreOffice.WriterDocument.1="C:\Program Files\LibreOffice\program\soffice.exe" -o "%1"
chomp $ftype;

$ftype =~ /.*=("[^"]*")/;
$ftype = $1;

# "C:\Program Files\LibreOffice\program\soffice.exe" libre-office-document.odt    
my $cmd = "$ftype libre-office-document.odt";

system($cmd);