2012-03-07 65 views
-4

我有這樣的代碼:如何內有條件訪問哈希散列在Perl

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

目前只給出 「+」 輸出

+0

它給出了什麼輸出? – 2012-03-07 09:18:12

回答

3

因爲%temp%hashuse strict會告訴你。

此外,您不能同時獲得if/else。條件是真的,你得到的第一部分,或者不是,你會得到其他部分。 (與elsif,第二個條件可能不是真實的,你什麼都沒有)。

+0

你說得對。它沒有打印「 - 」?我更新了更改。 – neversaint 2012-03-07 09:20:49

+1

我更新了答案。也許你只需要兩個'if's? – choroba 2012-03-07 09:22:44

+3

你真的不應該解決這個問題 - 它使答案無關緊要,對其他人無用。 – Borodin 2012-03-07 09:43:28