您的位置:首页 > 其它

perl的一点问题

2017-08-06 10:30 274 查看
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

建议修改的方法,是将这种数组作为全局变量,像开头我使用的情况一样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: