0

我正在尝试将散列放入Perl 中%listvol的数组中。@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。似乎我每次都得到相同的值。

有人有想法吗?

4

1 回答 1

2

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

当您更改%listvol第二个条目的内容时,您同时修改了第一个条目。解决此问题的一种方法是使用{%listvol}而不是\%listvol. 前者对 的当前内容进行浅拷贝%listvol,就像[@fileInfo]对 的当前内容进行浅拷贝一样@fileInfo

于 2012-05-11T10:42:52.177 回答