Отправить переменные perl в команду и захватить вывод - PullRequest
3 голосов
/ 03 февраля 2012

Я пытаюсь передать переменные perl в системную команду, а затем записать вывод для последующего использования, вот мой текущий код:

my $updatedCmd = "|svn diff --summarize $svnOldFull $svnNewFull";
my $updatedUrls = '';
open UPDATES, $updatedCmd or die "Can't get updates";
while(<UPDATES>) {
  print $_;
}

print "THIS_SHOULD_OUTPUT_AT_THE_END\n";

Проблема в том, что я получаю вывод:

THIS_SHOULD_OUTPUT_AT_THE_END
A       /test
A       /test2
A       /deployment.txt

Я хотел бы иметь возможность захватить все выходные данные команды, прежде чем позволить моему сценарию perl продвинуться дальше.

Ответы [ 2 ]

5 голосов
/ 03 февраля 2012

Более современный способ сделать это заключается в следующем:

   my @cmd = qw(svn diff --summarize), $svnOldFull, $svnNewFull;
   open my $pipe, '-|', @cmd or die "oops: $!";
   while (<$pipe>) { ... }

Преимущества

  • без глобалов

  • режим открытия отделен от файла / команды

  • команда в виде массива, поэтому нет необходимости заключать в кавычки оболочку

3 голосов
/ 03 февраля 2012

Вы поместили трубу не в тот конец своей команды.Попробуйте это:

my $updatedCmd = "svn diff --summarize $svnOldFull $svnNewFull|";
...