2017-02-28 33 views
0

子程序我有一個代碼,是這樣的一個數組裏面這就是:的Perl:如何訪問3個哈希通過參照

foreach $item (@total_data) 
{ 
    setinfo($item); 
} # @total_data contains an array of references to hashes (\%hash1 ... \%hashN) 

在subrutine是這樣的:

sub setinfo 
{ 

    my ($argument) = @_; 

    my $i = 0; 


    #inside original hash $argument{"data"}{"fulldraw"} there is an [array] 
    #that contains numbers of the form XYYZ and I want to split them into 
    #the following pairs XY YY YZ but that code works ok# 

    foreach $item (${$argument{"data"}{"fulldraw"}}) 
    { 
     my $match; 
     my $matchedstr; 

     if ($item =~ /^\d{4}$/) 
     { 

          ... 
     } 
     else 
     { 
      print STDERR "DISCARDED: $item\n"; 
     } 
    } 


} 

我知道我可能在解除它的引用方面犯了錯誤,但無法弄清楚我在互聯網上閱讀過的所有文章。

謝謝!

+0

http://perlmonks.org/?node=References+quick+reference – ysth

回答

2
@{ ... } # dereference 

也許$參數是一個hashref;你需要使用

foreach $item (@{ $argument->{data}->{fulldraw} }) 
+0

嗨,我還在嘗試,幾分鐘前我想出了: foreach $ item(@ {$$ argument {「data」} {「fulldraw」}}) 並且這個工作正確。你說什麼是一樣的? – SJPRO

+0

它的工作原理是一樣的。現在我還有一個問題,如果我可以問你。 – SJPRO

+0

@SJPRO相同。 $參數是一個hashref,而不是hash,所以需要取消引用或使用其他語法。 – asthman

1

只需使用解除引用@{ ... }

foreach $item (@{ $argument->{data}{fulldraw} }) 

您可以使用Data::Dumper可視化複雜的結構:

use Data::Dumper; 
print Dumper($argument); 
+0

嗨,不工作,它甚至不執行foreach循環。 – SJPRO

+0

固定。您正在訪問散列'%參數'而不是'$ argument'引用的散列。 – ikegami