如何在Perl中访问条件内的哈希哈希

时间:2012-03-07 09:14:44

标签: perl data-structures hash

我有这样的代码:

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'
    ];

目前只提供“+”输出

1 个答案:

答案 0 :(得分:3)

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

此外,你不能同时获得if / else。条件是真的你得到第一部分,或者它不是,你得到了其他部分。 (对于elsif,第二个条件可能也不正确,你什么也得不到。)