0

我对以下代码有疑问(Perl/Cygwin)

#!/usr/bin/perl
open FILE, ">", "filename.txt" or die $!;
print FILE "A\n";
print FILE "B\n";
print FILE "C\n";
close (FILE); 
system("xargs echo E < filename.txt");

我希望它调用 echo 三次并打印

E A
E B
E C

但相反它输出

E A B C

我用 xargs 分隔符设置尝试了各种方法,但无济于事。任何人都可以帮忙吗?

4

4 回答 4

4

试试 xargs -n1 echo E < filename.txt

于 2011-11-10T20:06:05.037 回答
1

'xargs' 正在做它应该做的事情。为什么要产生一个外部进程来做 Perl 可以做的事情?相反,关闭您的文件并执行以下操作:

open FILE, '<', 'filename.txt' or die $!;
while (<FILE>) {
    print "E $_";
}
于 2011-11-10T20:15:11.167 回答
1

为什么不使用叉子:

my @arr = qw(A B C);
for my $c (@arr) {
  fork and next;
  exec( echo => $c );
}

这可能需要更多的验证,并且您可以使用Parallel::ForkManager 之类的东西更好地控制并发进程的数量,我假设您确实在做比“回声”更复杂的事情。

于 2011-11-10T21:01:53.480 回答
0
open my $file, '<', 'filename.txt' or die $!; 
while (<$file>){ 
  print "E $_"; 
}
于 2011-11-10T20:43:01.680 回答