在Perl中,在遍历散列时如何跳过空键?

在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]-

这是我的问题,我对Perl不是很了解,我有一个需要修复的函数

调用此函数时,CLI将显示以下文本:

The following models are available ================================================== 1. 2. Cisco1240 3. Catalyst3750 4. Catalyst3650 5. HP2524 如果我添加以下行:

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;
    }
    

  • foreach(键%{$features->{features}[0]->{deviceModel}) { 下一个除非长度(美元); 打印“$i.$\un”; $i++; } foreach(键%{$features->{features}[0]->{deviceModel}) { 下一个除非长度(美元); 打印“$i.$\un”; $i++; } 输出:

    1. Catalyst3750 2. Cisco1240 3. Catalyst3650 4. HP2524 1.催化剂3750 2.Cisco1240 3.催化剂3650 4.HP2524 输出:

    1. Catalyst3750 2. Cisco1240 3. Catalyst3650 4. HP2524 1.催化剂3750 2.Cisco1240 3.催化剂3650
    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