Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中,如何向哈希数组中的哈希添加新的键、值对?_Perl_Hash - Fatal编程技术网

在perl中,如何向哈希数组中的哈希添加新的键、值对?

在perl中,如何向哈希数组中的哈希添加新的键、值对?,perl,hash,Perl,Hash,嗨,我需要在散列数组中的散列条目中添加一个新的键、值对。 下面是一些不起作用的示例代码(简化为只有1个数组条目),print语句的输出只包含1个条目 my @AoH; push @AoH, { TEST1 => 'testvalue' }; for my $hash (@AoH) { $hash{'TEST2'} = 'testvalue2'; print Dumper($hash); } 我做错了什么 谢谢。这段代码看起来有点奇怪,所以为了在这里简单地展示它,我假设它是这样做的,但修

嗨,我需要在散列数组中的散列条目中添加一个新的键、值对。 下面是一些不起作用的示例代码(简化为只有1个数组条目),print语句的输出只包含1个条目

my @AoH;
push @AoH, { TEST1 => 'testvalue'  };
for my $hash (@AoH)
{
$hash{'TEST2'} = 'testvalue2';
print Dumper($hash);
}
我做错了什么


谢谢。

这段代码看起来有点奇怪,所以为了在这里简单地展示它,我假设它是这样做的,但修复代码需要做的主要事情是更改:

$hash{'TEST2'} = 'testvalue2';
致:

或:

额外的“$”或“->”取消对哈希引用“$hash”的引用。因为两者都不存在,所以它将$hash{'TEST2'}视为不同的变量:'%hash'(不是'$hash'),并将'testvalue2'分配给该变量。您会收到一条很好的错误消息:

Global symbol "%hash" requires explicit package name at - line XX
如果您尝试使用以下命令运行此代码:

use strict;
use warnings;

一开始。。。你应该一直这样做,所以从现在开始,每次都要这样做。

谢谢Dms,是的,这是为了举个例子。我使用了严格的警告和警告,我曾尝试去引用它,但仍然没有运气。我应该在几个小时后回家,我会再试一次,看看进展如何。
use strict;
use warnings;
use Data::Dumper;
my @AoH=();
my %data_source_hash=(
TEST1 => 'testvalue1',
TEST2 => 'testvalue2'
);

# adds whole hash as the array element
push @AoH,{ %data_source_hash };

print Dumper(@AoH);
@AoH=();
print "---------------------------\n";

# adds each hash $key, $value pair as an element 

while ( my ($key, $value) = each %data_source_hash )
{
push @AoH, { $key => $value  };
}

print Dumper(@AoH);
@AoH=();
print "---------------------------\n";

# adds extra hash entry to each array element

push @AoH, { TEST1 => 'testvalue'  };
push @AoH, { TEST3 => 'testvalue3'  };
foreach my $el (@AoH)
{
 my $key = 'TEST2';
 $$el{$key} = $data_source_hash{$key};
}
print Dumper(@AoH);
use strict;
use warnings;
use strict;
use warnings;
use Data::Dumper;
my @AoH=();
my %data_source_hash=(
TEST1 => 'testvalue1',
TEST2 => 'testvalue2'
);

# adds whole hash as the array element
push @AoH,{ %data_source_hash };

print Dumper(@AoH);
@AoH=();
print "---------------------------\n";

# adds each hash $key, $value pair as an element 

while ( my ($key, $value) = each %data_source_hash )
{
push @AoH, { $key => $value  };
}

print Dumper(@AoH);
@AoH=();
print "---------------------------\n";

# adds extra hash entry to each array element

push @AoH, { TEST1 => 'testvalue'  };
push @AoH, { TEST3 => 'testvalue3'  };
foreach my $el (@AoH)
{
 my $key = 'TEST2';
 $$el{$key} = $data_source_hash{$key};
}
print Dumper(@AoH);