在Perl中,在遍历散列时如何跳过空键?
这是我的问题,我对Perl不是很了解,我有一个需要修复的函数 调用此函数时,CLI将显示以下文本: The following models are available ================================================== 1. 2. Cisco1240 3. Catalyst3750 4. Catalyst3650 5. HP2524 如果我添加以下行:在Perl中,在遍历散列时如何跳过空键?,perl,hash,traversal,Perl,Hash,Traversal,这是我的问题,我对Perl不是很了解,我有一个需要修复的函数 调用此函数时,CLI将显示以下文本: The following models are available ================================================== 1. 2. Cisco1240 3. Catalyst3750 4. Catalyst3650 5. HP2524 如果我添加以下行: warn Dumper($features->{features}[0]-
warn Dumper($features->{features}[0]->{deviceModel});
它转储了以下内容:
$VAR1 = {
'deviceModel' => {
'' => {
'cfg' => []
},
'Cisco1240' => {
'cfg' => [
'cisco1240feature.cfg'
]
},
'Catalyst3750' => {
'cfg' => [
'catalyst3750feature.cfg'
]
},
'Catalyst3650' => {
'cfg' => [
'catalyst3650feature.cfg'
]
},
'HP2524' => {
'cfg' => [
'hp2524feature.cfg'
]
}
}
};
但它似乎不工作做我想要的。如果该项为空,我想跳过它。嗯,移位(主程序中的隐式参数到移位)或移位(函数中的隐式参数)都不会对您有帮助,因为您不会打印它们中的任何一个
您可以:
'
条目(取决于其生成方式)''
条目:
delete $features->{features}[0]->{deviceModel}->{''};
if($_ eq '') {
next;
}
或
'
条目(取决于其生成方式)''
条目:
delete $features->{features}[0]->{deviceModel}->{''};
if($_ eq '') {
next;
}
或
4.HP2524非常感谢!完成了,谢谢你的解释!谢谢!完成了,谢谢你的解释!谢谢这个替代方案似乎比我提出的更优雅,也许
next,除非/\S/代码>可能更合适?谢谢!这个替代方案似乎比我提出的更优雅,也许next,除非/\S/代码>可能更合适?不要说在Perl中移动列表不起作用,除非你是认真的,否则要寻找替代方法。为你的问题选择一个描述性和有意义的标题。SO的全部目的是为其他人提供一种找到编程问题答案的方法。最重要的是,不要随意辱骂。不要说在Perl中移动列表不起作用,除非你是认真的,否则要寻找替代方法。为你的问题选择一个描述性和有意义的标题。SO的全部目的是为其他人提供一种找到编程问题答案的方法。最重要的是,不要随意辱骂。使用grep-inside-for循环+1。。。这让我的审美骨骼发痒。+1用于grep-inside-for-loop。。。这让我的审美观发痒。
#!/usr/bin/env perl
use strict; use warnings;
my $devices = {
'deviceModel' => {
'' => { 'cfg' => [] },
'Cisco1240' => { 'cfg' => ['cisco1240feature.cfg' ] },
'Catalyst3750' => { 'cfg' => [ 'catalyst3750feature.cfg' ]},
'Catalyst3650' => { 'cfg' => [ 'catalyst3650feature.cfg' ]},
'HP2524' => { 'cfg' => [ 'hp2524feature.cfg' ]},
}
};
{
my $item = 1;
for my $d (grep length, keys %{ $devices->{deviceModel} }) {
printf "%2d. %s\n", $item++, $d;
}
}
1. Catalyst3750
2. Cisco1240
3. Catalyst3650
4. HP2524