传递数组中的命令以打开

时间:2015-08-27 18:47:51

标签: windows perl

我有一个在Perl数组@cmd中准备参数的命令。最终目标是执行该命令并捕获变量中的输出行。在linux下,我通过打开管道来执行它,在子程序中执行命令并在父项中捕获它。但这在Windows中似乎不起作用(我收到错误'-' is not recognized as an internal or external command)。

我注意到这样的事情确实有效:

open(my $fh, '-|', 'dir') or die $!;
my @output = <$fh>;
close $fh;

我的问题是如何将@cmd传递给open()?或者是否有其他更简单的方法来捕获Windows中的命令输出?

还有一些注意事项 - @cmd是随时准备的,所以我不知道它在执行open()时的表现。我只能使用核心功能,没有第三方软件包。

谢谢!

1 个答案:

答案 0 :(得分:4)

仅在{5.2}中添加了对open(my $fh, '-|', 'dir')的支持。在此之前,只有两个arg版本可用。

open(my $fh, 'dir |')

如果您需要构建命令,则需要使用与

等效的内容
use Win32::ShellQuote qw( quote_system_string );

my $cmd = quote_system_string($prog, @args);
open(my $fh, "$cmd |")