Perl:如何通过引用访问传递给子例程的3个哈希内部的数组

时间:2017-02-28 03:33:34

标签: perl multidimensional-array hash dereference

我有一个类似的代码:

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";
        }
    }


}

我知道我可能会错误地将其解除引用,但无法用我在互联网上阅读的所有文章来解决这个问题。

谢谢!

2 个答案:

答案 0 :(得分:2)

@{ ... } # dereference

也许$ argument是hashref;你需要使用

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

答案 1 :(得分:1)

只需使用取消引用@{ ... }

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

您可以使用Data::Dumper来查看复杂结构:

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