您没有重定向任何内容:您将脚本的输出通过管道传输到cmd.exe
内置dir
或别名,ls
具体取决于您的操作系统(这意味着,如果您ls
在 Windows 上的路径中使用 Cygwin 运行此脚本,您可能会遇到麻烦)。
写信dir
似乎没有用。如果您想过滤 dir
输出,即从运行中获取输出dir
并在打印之前对其进行操作,您应该将其通过管道传输到您的脚本中,并且您应该打印处理后的输出。
#!/usr/bin/env perl
use strict; use warnings;
my $pid = open my $dir_out, '-|', 'cmd.exe /c dir';
die "Cannot open pipe: $!\n" unless $pid;
my $output_file = 'output.txt';
open my $my_out, '>', $output_file
or die "Cannot open '$output_file': $!";
while (my $line = <$dir_out>) {
$line =~ s/bytes free/peons liberated/;
print $my_out $line;
}
close $my_out
or die "Cannot close '$output_file': $!";
close $dir_out
or die "Cannot close pipe: $!\n";
当然,我假设您的程序中还发生了其他事情,这只是其中的一小部分。否则,您不需要为简单的过滤器编写这么多代码。