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