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 を 3 回呼び出して出力したい

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

フォークを使用しない理由:

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

これにより、さらに検証が使用される可能性があり、Parallel :: ForkManagerのようなものを使用して、並行プロセスの数をより細かく制御できます。実際には、「echo」よりも複雑なことを行っていると思います。

于 2011-11-10T21:01:53.480 に答える
1

「xargs」は、本来あるべきことを正確に行っています。Perl ができることを行うために外部プロセスを生成するのはなぜですか? 代わりに、ファイルを閉じて次のようにします。

open FILE, '<', 'filename.txt' or die $!;
while (<FILE>) {
    print "E $_";
}
于 2011-11-10T20:15:11.167 に答える
0
open my $file, '<', 'filename.txt' or die $!; 
while (<$file>){ 
  print "E $_"; 
}
于 2011-11-10T20:43:01.680 に答える