【问题标题】:How to access hash of hash within conditional in Perl如何在 Perl 的条件下访问散列的散列
【发布时间】:2012-03-24 19:26:36
【问题描述】:

我有这样的代码:

use Data::Dumper;
my %hash = (
          'chrX' => {
                      'b' => [
                               '-51811268 210',
                               '-51810794 350',
                               '-51809935 298'
                             ],
                      'f' => [
                               '51929018 210',
                               '51929492 350',
                               '51930351 298'
                             ]
                    }
        );




  foreach my $cnam ( keys %hash  ) {
             my @lpos_f = ();          
             my @lpos_b = ();          



            if ( $hash{$cnam}{"f"} ) {
                @lpos_f = @{ $hash{$cnam}{"f"} }; 
                print "+\n";              
                print Dumper \@lpos_f;    

            }
            elsif ( $hash{$cnam}{"b"} ) {
                @lpos_b = @{ $hash{$cnam}{"b"} }; 
                print "-\n";              
                print Dumper \@lpos_b;    
            }


    }

为什么它没有在每个 ELSIF 条件下提供打印输出,例如 它给了这两个。

     +
     [
     '51929018 210',
     '51929492 350',
     '51930351 298'
     ];

    -
    ['-51811268 210',
     '-51810794 350',
     '-51809935 298'
    ];

目前它只给出“+”输出

【问题讨论】:

    标签: perl data-structures hash


    【解决方案1】:

    因为%temp 不是%hashuse strict 会告诉你的。

    此外,您不能同时获得if / else。要么条件为真,你得到第一部分,要么条件不成立,你得到其他部分。 (使用elsif,第二个条件也可能不成立,你什么也得不到)。

    【讨论】:

    • 你是对的。它没有打印“-”吗?我更新了更改。
    • 你真的不应该解决这个问题——它会让答案变得无关紧要,对其他人毫无用处。
    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 2011-03-13
    • 2016-07-18
    • 2013-03-14
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    相关资源
    最近更新 更多