我有一个类似的代码:
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 :(得分:2)
@{ ... } # dereference
也许$ argument是hashref;你需要使用
foreach $item (@{ $argument->{data}->{fulldraw} })
答案 1 :(得分:1)
只需使用取消引用@{ ... }
:
foreach $item (@{ $argument->{data}{fulldraw} })
您可以使用Data::Dumper来查看复杂结构:
use Data::Dumper;
print Dumper($argument);