我有一个在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()
时的表现。我只能使用核心功能,没有第三方软件包。
谢谢!
答案 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 |")