我有下面的数组:
ifNameList -> $VAR1 = [
{
'VALUE' => ' gpon_olt-1/1/1',
'ASN1' => '285278465'
},
{
'VALUE' => ' gpon_olt-1/1/2',
'ASN1' => '285278466'
},
{
'VALUE' => ' gpon_olt-1/1/3',
'ASN1' => '285278467'
},
{
'VALUE' => ' gpon_olt-1/1/4',
'ASN1' => '285278468'
},
{
'VALUE' => ' gpon_olt-1/1/5',
'ASN1' => '285278469'
},
]
我需要迭代这个哈希数组,比较每个哈希的“VALUE”字段,直到匹配并执行某个操作。
我已经做了下面的代码,但它不工作。我做错了什么?
sub GetIfIndexFromName{
my $ifName = shift;
my @ifList = shift;
my $index;
for (@ifList){
my %interfaceHash = %$_;
# Just trims any blank space on the string:
$interfaceHash->{"VALUE"} =~ s/^\s+|\s+$//g;
if($interfaceHash->{"VALUE"} eq $ifName){
print "trimmed interface name-> ".$interfaceHash->{"VALUE"}."\n\n";
$index = $interfaceHash->{"ASN1"};
}
}
print "Returning index value: ".$index;
return $index;
}
1条答案
按热度按时间jfgube3f1#
两个错误。
问题1:变量错误
始终使用
use strict; use warnings;
。它会发现以下错误:没有名为
$interfaceHash
的变量。有三种方法可以解决此问题:
第一次
推荐使用后者,它避免了创建哈希值的副本,而创建副本需要创建大量临时标量,这些都是无用的工作。
问题2:参数检索不正确
以下是错误的:
shift
返回一个标量。使用一个数组始终只保存一个标量是绝对没有意义的。第一个
前一种约定效率更高,但后一种约定可以在调用者中创建更干净的代码。
我会怎么写: