我正在尝试将哈希%listvol
放入Perl中的数组@fileInfo
。
@fileInfo = ($filename, $data, $index, \%listvol);
%listvol
包含一个音量列表:key = $vol
,value = $vol
。
第一个$vol
值为ABCDEF
,然后是GFFFF
,EEEAA
- 总是不同。
然后我将数组@fileInfo
放入哈希%listeAllFile
:
$listeAllFile{$nameOfFile} = [@fileInfo];
后来我试图获取哈希%listvol
但没有成功。我正在使用此代码:
foreach $key (keys %listeAllFile) {
@tab = @{ $listeAllFile{$key} };
$filename = $tab[0];
%listvol = %{ $tab[3] };
foreach $vol (keys %listvol) {
print "\n vol is $vol for file $filename";
}
文件名总是不同的,所以没关系。但变量$vol
的值始终相同,ABCDEF
。似乎我每次都得到相同的价值。
有没有人有想法?
答案 0 :(得分:2)
虽然您没有包含重现问题的代码,但我很确定问题是您在每个数组中存储对相同%listvol
哈希的引用。
当您为第二个条目更改%listvol
的内容时,您将同时修改第一个条目。解决此问题的一种方法是使用{%listvol}
代替\%listvol
。前者对%listvol
的当前内容进行浅层复制,就像[@fileInfo]
制作@fileInfo
当前内容的浅表副本一样。