perl版本是5.16(centos7上自带)
perl模块化写程序有一些小问题,我遇到的情况类似如下,
正确能工作的代码如下,
my @ifIndex; sub interface_fromobj { my $policy_index = @_[0]; foreach (@ifIndex) { s/"//g ; my @littlearray = split / /; my @oid = split /\./, $littlearray[0]; chomp $littlearray[3]; if ($oid[-1] eq $policy_index) { my $ifDescr = `$snmpget -v $version $node -c $comm $ifDescr_oid.$littlearray[3]`; my @ifDescrarray = split (/ /,$ifDescr); chomp $ifDescrarray[3]; return $ifDescrarray[3]; } } } 这是改写后的代码,原始代码类似如下
sub interface_fromobj {
my @ifIndex = @_[0]; my $policy_index = @_[1]; foreach (@ifIndex) { s/"//g ; my @littlearray = split / /; my @oid = split /\./, $littlearray[0]; chomp $littlearray[3]; if ($oid[-1] eq $policy_index) { my $ifDescr = `$snmpget -v $version $node -c $comm $ifDescr_oid.$littlearray[3]`; my @ifDescrarray = split (/ /,$ifDescr); chomp $ifDescrarray[3]; return $ifDescrarray[3]; } } }
在原始代码中,出现的情况是@ifIndex经常获取失败。
也就是说,模块化的perl程序子函数,对于输入参数是数组(例如这里@ifIndex)的类型,经常性会出现问题。原因可能是数组比较大?未明FIXME
建议修改的方法,是将这种数组作为全局变量,像开头我使用的情况一样。