Arrays Perl:如何将数组数据存储在散列中并再次提取

Arrays Perl:如何将数组数据存储在散列中并再次提取,arrays,perl,hash,Arrays,Perl,Hash,我正在从多个服务器收集大量数据。我需要存储一些服务器数据,并与其他特定服务器数据进行比较。因此,我不需要为每台服务器设置一个数组,我希望将其存储在散列中,但在实际获取散列中的数据时遇到了问题 foreach my $cluster_type (sort keys %{$href_server_list}){ foreach my $server (sort @{$href_server_list->{$cluster_type}}){ my @a_cmd_resul

我正在从多个服务器收集大量数据。我需要存储一些服务器数据,并与其他特定服务器数据进行比较。因此,我不需要为每台服务器设置一个数组,我希望将其存储在散列中,但在实际获取散列中的数据时遇到了问题

foreach my $cluster_type (sort keys %{$href_server_list}){
    foreach my $server (sort @{$href_server_list->{$cluster_type}}){
        my @a_cmd_results = ();
        get_server_data(\@a_cmd_results,$server);
        if($cluster_type eq "TYPEA"){
            push @{$GLOBAL_HASH_TYPEA_DATA{$server}}, @a_cmd_results;
        }
        elsif($cluster_type eq "TYPEB"){
            push @{$GLOBAL_HASH_TYPEB_DATA{$server}}, @a_cmd_results;
        }


my @TYPEA;
my @TYPEB;
my $server;
#loop through the 4 different servers
for(my $i=0;$i<4;$i++){
    $server=$TYPEA_keys[$i];
    push @TYPEA, @{$GLOBAL_HASH_TYPEA_DATA{$server}};#error here, "Cant use an undefined value as an ARRAY reference
    $server=$TYPEB_keys[$i];
    push @TYPEB, @{$GLOBAL_HASH_TYPEB_DATA{$server}};
    #sort and compare data from TYPEA and TYPEB
}

但是,如果它只是引用数组@a_cmd_results,那么这是不好的,因为它会被每个服务器不断重复使用,并且只包含最后一个服务器?

您应该使用
@a_cmd_results
的内容构建一个新的数组引用,如下所示:

推送{$GLOBAL_HASH_TYPEA_DATA{$server},[@a_cmd_results]


Perl中的
[…]
语法返回内部值列表的数组引用,而
(…)
语法只是一个简单的列表。

似乎推送是一个问题。虽然简单地尝试分配与数组相等的内容通常会给出它的长度,但方括号会改变这一点。因此,解决办法如下

$GLOBAL_HASH_TYPEA_DATA{$server} = [@a_cmd_results];
my @TYPEA = @{$GLOBAL_HASH_TYPEA_DATA{$server}};

现在看来,它正在存储数据的地址,而我的比较失败了。放入@TYPEA[0]=”数组(0x2668508)中的值没有@TYPEA[1]。
$GLOBAL_HASH_TYPEA_DATA{$server} = [@a_cmd_results];
my @TYPEA = @{$GLOBAL_HASH_TYPEA_DATA{$server}};