Perl:如何访问传递给子程序的哈希数组

Perl: How to access Array of Hashes passed to a Subroutine

有一个从 xml 读取的 perl 脚本,在一个子程序中将数据解析为散列,输出一个散列数组,然后从主程序调用第二个子程序来处理散列数组。

Data::Dumper 显示一切都在正确传递。

很难弄清楚为什么我现在无法访问哈希。

use strict;
use warnings;
use Data::Dumper;

my (@sortedData, $value1, $value2);
use subs qw(processData outputData);

@sortedData = processData;
outputData($value1, $value2, \@sortedData);

sub processData{
    # Example code
    # # Does some processing of xml that results in a hash.
    # # That series of hashes is pushed onto an array
    my ($item, @results);

    # foreach $item ( @{ $rss->{items}){
    #   my %data = (
    #       'first' => $item->{'value'},
    #       'second' => $item->{'value'},
    #       'third' => $item->{'value'}
    #   );

    #   push @results, \%data;
    # }
    # Essentially the hash is :

    @results = (
        {'data1'=>810,'data2'=>153,'data3'=>215},
        {'data1'=>160,'data2'=>220,'data3'=>604},
        {'data1'=>940,'data2'=>103,'data3'=>115},
        {'data1'=>100,'data2'=>319,'data3',525},
        {'data1'=>500,'data2'=>803,'data3'=>650}
        );
    return @results;
}

sub outputData{
    my ($input1, $input2, @localData) = @_;
    print Dumper @localData;

    print "\@localData: " . @localData . "\n";
    foreach my $i (@localData){
    #   foreach my $j ($i){
    #       print $i . "\n" . $j . "\n";
    #   }
        print "$i: " . $i . "\n";
    }
}

输出:

$VAR1 = [
          {
            'data3' => 215,
            'data2' => 153,
            'data1' => 810
          },
          {
            'data3' => 604,
            'data2' => 220,
            'data1' => 160
          },
          {
            'data2' => 103,
            'data3' => 115,
            'data1' => 940
          },
          {
            'data1' => 100,
            'data3' => 525,
            'data2' => 319
          },
          {
            'data1' => 500,
            'data3' => 650,
            'data2' => 803
          }
        ];
@localData: 1
$i: ARRAY(0x80071b30)

我不明白为什么@localData 的值为 1 或者为什么 @localData 的元素引用是 ARRAY 而不是 HASH。

我当然是第一次测试我对 PERL 数组的更深入理解。 没有我想的那么明白

您将数组的 引用 传递给 sub,然后将此单个标量分配给 @localData。修复:

sub outputData{
    my ($input1, $input2, $localData) = @_;
    print Dumper $localData;

    print "\@localData: " . @$localData . "\n";
    foreach my $i (@$localData){
       ...
    }
}