我遇到以下代码(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分隔符设置进行各种操作但无济于事。有人可以帮忙吗?
答案 0 :(得分:4)
尝试xargs -n1 echo E&lt; FILENAME.TXT
答案 1 :(得分:1)
'xargs'正在做它应该做的事情。为什么要生成一个外部进程来做Perl可以做的事情?相反,请关闭您的文件并执行:
open FILE, '<', 'filename.txt' or die $!;
while (<FILE>) {
print "E $_";
}
答案 2 :(得分:1)
为什么不使用fork:
my @arr = qw(A B C);
for my $c (@arr) {
fork and next;
exec( echo => $c );
}
这可以使用更多的验证,并且您可以使用Parallel::ForkManager之类的内容更多地控制您拥有的并发进程数,并且我假设您实际上正在做的事情比“echo”更多。
答案 3 :(得分:0)
open my $file, '<', 'filename.txt' or die $!;
while (<$file>){
print "E $_";
}