1

これは私の問題です。私は Perl の知識があまりなく、この機能を修正する必要があります。

この関数deviceModelMenu()が呼び出されると、CLI は次のテキストを表示します。

以下のモデルが利用可能です
==================================================
1.   
2.Cisco1240
3. 触媒3750
4. 触媒3650
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++;
}

次の行を追加すると:

warn Dumper($features->{features}[0]->{deviceModel});

これをダンプします:

$VAR1 = {
      'デバイスモデル' => {
                         '' => {
                                 'cfg' => []
                               }、
                         'Cisco1240' => {
                                        'cfg' => [
                                                 「cisco1240feature.cfg」
                                               ]
                                      }、
                         'Catalyst3750' => {
                                           'cfg' => [
                                                    「catalyst3750feature.cfg」
                                                  ]
                                         }、
                         'Catalyst3650' => {
                                           'cfg' => [
                                                    「catalyst3650feature.cfg」
                                                  ]
                                         }、
                         'HP2524' => {
                                     'cfg' => [
                                              「hp2524feature.cfg」
                                            ]
                                   }
                       }
    };

お気づきかもしれませんが、最初の項目は実際には空です。次の行を追加してスキップし、残りの情報を出力するだけです。

if ($_ eq '') {
        shift;
}

しかし、そうではないようです仕事私がしたいことをしてください。項目が空の場合はスキップしたい。

4

3 に答える 3

6

まあ、シフト@ARGV(メインプログラムのシフトの暗黙の引数)もシフト@_(関数のシフトの暗黙の引数)も、どちらも印刷していないので、役に立ちません。

次のいずれかを実行できます。

  1. ''そもそもエントリを追加しない(生成方法によって異なります)

  2. ''印刷する前にエントリを削除してください。

    delete $features->{features}[0]->{deviceModel}->{''};
    
  3. エントリを印刷しないでください:

    if($_ eq '') {
        next;
    }
    

    また

    if($_ ne '') {
        print "$i. $_ \n";
        $i++;
    }
    
于 2012-04-25T19:41:20.997 に答える
4
foreach(キー%{$ features-> {features} [0]-> {deviceModel}})
{{
    次に、length($ _);でない限り
    印刷"$i。$_\ n";
    $ i ++;
}
于 2012-04-25T19:42:12.883 に答える
3
#!/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. 触媒3650
 4.HP2524
于 2012-04-25T19:59:05.770 に答える