Perl вызывает xargs: разделитель конца строки не работает - PullRequest
0 голосов
/ 10 ноября 2011

У меня проблема со следующим кодом (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 голосов
/ 11 ноября 2011

Попробуйте xargs -n1 echo E

1 голос
/ 11 ноября 2011

Почему бы не использовать вилку:

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

Для этого может потребоваться больше проверки, и вы сможете получить больше контроля над тем, сколько параллельных процессов у вас есть с чем-то вроде Parallel :: ForkManager , и я предполагаю, что вы действительно делаете что-то более сложное, чем ' эхо».

1 голос
/ 11 ноября 2011

Xargs делает именно то, что должен. Зачем создавать внешний процесс, чтобы делать то, что может делать Perl? Вместо этого закройте ФАЙЛ и выполните:

open FILE, '<', 'filename.txt' or die $!;
while (<FILE>) {
    print "E $_";
}
0 голосов
/ 11 ноября 2011
open my $file, '<', 'filename.txt' or die $!; 
while (<$file>){ 
  print "E $_"; 
}
...