我正在尝试将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脚本更进一步之前捕获所有命令输出。
答案 0 :(得分:5)
更现代的方法是:
my @cmd = qw(svn diff --summarize), $svnOldFull, $svnNewFull;
open my $pipe, '-|', @cmd or die "oops: $!";
while (<$pipe>) { ... }
优点
没有全局
与文件/命令分开的打开模式
命令为数组,因此无需在shell中引用
答案 1 :(得分:3)
您将管道放在命令的错误一端。试试这个:
my $updatedCmd = "svn diff --summarize $svnOldFull $svnNewFull|";