为什么迭代这个哈希得到相同的值?

时间:2012-05-11 09:30:15

标签: arrays perl hash get put

我正在尝试将哈希%listvol放入Perl中的数组@fileInfo

@fileInfo = ($filename, $data, $index, \%listvol);

%listvol包含一个音量列表:key = $vol,value = $vol。 第一个$vol值为ABCDEF,然后是GFFFFEEEAA - 总是不同。

然后我将数组@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。似乎我每次都得到相同的价值。

有没有人有想法?

1 个答案:

答案 0 :(得分:2)

虽然您没有包含重现问题的代码,但我很确定问题是您在每个数组中存储对相同%listvol哈希的引用。

当您为第二个条目更改%listvol的内容时,您将同时修改第一个条目。解决此问题的一种方法是使用{%listvol}代替\%listvol。前者对%listvol的当前内容进行浅层复制,就像[@fileInfo]制作@fileInfo当前内容的浅表副本一样。