首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么当我在shell脚本中运行perl时,perl会抱怨“打开的参数太多”?

为什么当我在shell脚本中运行perl时,perl会抱怨“打开的参数太多”?
EN

Stack Overflow用户
提问于 2010-01-27 10:22:49
回答 2查看 5.4K关注 0票数 0

我运行我的Perl脚本(gettotal.pl),它运行得很好。我设法得到了TOTAL.txt的和,并将输出值附加到test.txt。但是,当我在shell脚本(test.sh)中运行它时,我得到了以下错误:

太多的参数打开在/home/daily/script/per_NODE_HR/get极速. to第29行,靠近“$dir”执行/home/$dir/per_NODE_HR/get极速.to由于编译错误而中止。

手动运行它与在shell脚本中运行它有什么区别?简单但仍令我困惑:)

gettotal.pl

代码语言:javascript
复制
#!/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脚本

代码语言:javascript
复制
#!/bin/sh

perl /home/daily/scripts/per_NODE_HR/gettotal.pl
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-27 11:55:57

您所遇到的错误表明您的系统perl是一个真正古老的版本..。open的三个参数形式是在perl 5.6.0 (2000年3月22日发布)中添加的,因此如果您的open有太多的参数,似乎表明您正在将代码传递给5.5.x或更高版本的perl。尝试命令行上的perl -v以查看系统perl的版本。

至于如何解决这个问题,请使用/home/daily/scripts/per_NODE_HR/gettotal.pl而不是perl /home/daily/scripts/per_NODE_HR/gettotal.pl在您的shell脚本中调用它,它将按照shebang (#!)行中指定的那样传递给/opt/perl/bin/perl-w,就像在使用./gettotal.pl手动运行它时一样。

顺便说一句,您还可能希望在use warningsuse strict一起添加一个perl -w,而不是依赖于在perl -w中运行的代码。如果使用perl gettotal.pl,则不会启用警告。

票数 8
EN

Stack Overflow用户

发布于 2010-01-27 10:26:10

几乎可以肯定,perl != /opt/perl/bin/perl

试试which perl

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2146023

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档