perl的一点问题

xiaoxiao2021-02-28  73

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

建议修改的方法,是将这种数组作为全局变量,像开头我使用的情况一样。

转载请注明原文地址: https://www.6miu.com/read-43763.html

最新回复(0)