在我的(cmd.exe)当前工作目录中,有一个名为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")

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



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

最佳答案

使用反引号捕获输出。
您可以检查具有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);

10-08 18:38