我正在修改一个有16年历史的Perl脚本,它在电信生产服务器上运行着为i386-linux-thread-multi构建的perl v5.8.8。
当一个警报被触发时,脚本会通过一些嵌套的日志文件夹,根据会话ID来识别有罪的应用程序。
我遇到了一个STDOUT缓冲问题,grep结果(一个文件路径)没有正确地分配给变量。 我把使用的grep命令记录下来了,所以我可以仔细检查脚本,果然,有一次,grep结果丢失了,变量仍然是空的。我试过几种不同的语法,但都是一样的行为。
我不能更新Perl的版本,也不能以任何方式修改它。
代码如下。之前尝试过的语法被注释掉了。
binmode( STDOUT, ":unix" );
#my $returnval = readpipe("$grepcommand");
#my $returnval = qx/$grepcommand/;
#my $returnval = `$grepcommand`;
#my $returnval = qx ("\$grepcommand");
# seems to give more reliable results than the alternate approaches above which also work:
my $returnval;
open CMD,'-|',"$grepcommand" or die $@;
my $commandoutput;
while (defined($commandoutput=<CMD>)) {
$returnval = $commandoutput;
}
close CMD;
chomp $returnval;
print "grep command is $grepcommand\n";
print "corresponding file found by grep command is $returnval\n";