Perl在使用管道时反击

时间:2012-09-21 19:18:08

标签: perl sh backticks

我在尝试捕获简单命令的输出时遇到了一些问题:

$timeTotal = `echo $timeTotal + $time | bc -l`;

但我收到以下错误:

sh: +: not found
sh: Syntax error: "|" unexpected

这个命令在bash中运行得很好,但实际上似乎正在使用sh。在一开始我认为问题是管道使用(虽然总和没有得到很好的解释)。令我困惑的是,同一脚本中的以下命令不会导致错误并且正常工作:

my $time = `cat $out.$step | bc -l`;

有什么建议吗?

2 个答案:

答案 0 :(得分:6)

$timeTotal包含不应该的尾随换行符,因此您正在执行

echo XXX

+ YYY | bc -l

而不是

echo XXX + YYY | bc -l

你肯定错过了chomp某个地方。

你的命令中还有一个不合适的双引号。

答案 1 :(得分:-4)

不推荐使用反引号。请改用qx(..)语法。

$timeTotal = qx(echo $timeTotal + $time | bc -l");