我运行我的Perl脚本( gettotal.pl ),它运行正常。我设法得到TOTAL.txt的总和,并将输出值附加到test.txt。但是当我在shell脚本( test.sh )中运行它时,我收到了这个错误:
在/home/daily/scripts/per_NODE_HR/gettotal.pl第29行打开太多参数,在“”$ dir附近“)” /home/daily/scripts/per_NODE_HR/gettotal.pl的执行因编译错误而中止。
手动运行它(./gettotal.pl)和在shell脚本中运行它有什么区别?简单但仍然让我感到困惑: - )
gettotal.pl
#!/opt/perl/bin/perl-w
use strict;
my $sum;
open(FH,"/home/daily/scripts/per_NODE_HR/date.txt");
chomp (my @date = <FH>);
my $path = "/home/daily/output/per_NODE_HR/$date[0]/TOTAL.txt";
open(FILE,"$path") or die "Unable to open $path: $!";
my @hits = <FILE>;
$sum=sum($#hits);
print "TOTAL = $sum";
print "\n";
sub sum {
if ($_[0] == 0) {
return $hits[0];
}
return $hits[$_[0]] + sum($_[0]-1);
}
my $dir = "/home/daily/output/per_NODE_HR/$date[0]/test.txt";
open(OUT,'>>', "$dir") or die "Cannot open $dir: $!";
print OUT "TOTAL: $sum";
close OUT;
close FILE;
close FH;
shell脚本
#!/bin/sh
perl /home/daily/scripts/per_NODE_HR/gettotal.pl
答案 0 :(得分:8)
你得到的错误表明你的系统perl是一个真正古老的版本...... open
的三参数形式被添加到perl 5.6.0(2000年3月22日发布)中,所以a关于您的open
有太多参数的投诉似乎表明您将代码传递给5.5.x或更高版本的perl。在命令行上尝试perl -v
以查看系统perl的版本。
至于如何解决这个问题,请在shell脚本中使用/home/daily/scripts/per_NODE_HR/gettotal.pl
而不是perl /home/daily/scripts/per_NODE_HR/gettotal.pl
调用它,它将按照shebang({{1}中的指定传递给/opt/perl/bin/perl-w
}})line,就像用#!
手动运行它时一样。
顺便提一下,您可能还想添加./gettotal.pl
和use warnings
,而不是依赖于使用use strict
运行的代码。如果您使用perl -w
,则不会启用警告。
答案 1 :(得分:4)
几乎可以肯定,perl
!= /opt/perl/bin/perl
。
尝试which perl
。