ILi*_*cos 1 perl hash traversal
这是我的问题,我对Perl知之甚少,而且我有这个功能需要修复.
deviceModelMenu()调用此函数时,CLI将显示以下文本:
The following models are available ================================================== 1. 2. Cisco1240 3. Catalyst3750 4. Catalyst3650 5. HP2524
第一项是空的,这是错误的,我需要修复它,显示此菜单的代码片段是:
my $features = shift;
print "=" x 50, "\n";
print "The following models are available\n";
print "=" x 50, "\n";
my $i=1;
foreach (keys %{$features->{features}[0]->{deviceModel}})
{
print "$i. $_ \n";
$i++;
}
Run Code Online (Sandbox Code Playgroud)
如果我添加以下行:
warn Dumper($features->{features}[0]->{deviceModel});
Run Code Online (Sandbox Code Playgroud)
它抛弃了这个:
$VAR1 = {
'deviceModel' => {
'' => {
'cfg' => []
},
'Cisco1240' => {
'cfg' => [
'cisco1240feature.cfg'
]
},
'Catalyst3750' => {
'cfg' => [
'catalyst3750feature.cfg'
]
},
'Catalyst3650' => {
'cfg' => [
'catalyst3650feature.cfg'
]
},
'HP2524' => {
'cfg' => [
'hp2524feature.cfg'
]
}
}
};
您可能会注意到,第一项确实是空的.我添加了以下行来跳过它,只打印其余的信息:
if ($_ eq '') {
shift;
}
Run Code Online (Sandbox Code Playgroud)
但它似乎没有 工作做我想做的.我想跳过该项目,如果它是空的.
好吧,转移@ARGV(隐式参数到主程序中的移位)或移位@_(函数中移位的隐式参数)对你没有帮助,因为你没有打印它们中的任何一个.
你可以:
不首先添加''条目(取决于它是如何生成的)
''打印前删除条目:
delete $features->{features}[0]->{deviceModel}->{''};
Run Code Online (Sandbox Code Playgroud)不要打印条目:
if($_ eq '') {
next;
}
Run Code Online (Sandbox Code Playgroud)
要么
if($_ ne '') {
print "$i. $_ \n";
$i++;
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
1497 次 |
| 最近记录: |