【问题标题】:Why do I get the same value from iterating over this hash?为什么我通过迭代这个哈希得到相同的值?
【发布时间】:2012-05-19 21:37:41
【问题描述】:

我正在尝试在 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。似乎我每次都得到相同的值。

有人有想法吗?

【问题讨论】:

标签: arrays perl hash get put


【解决方案1】:

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

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

【讨论】:

  • 好的。你是对的,%listvol 可能使用相同的指针。它与 {%listvol} 完美搭配。非常感谢。
猜你喜欢
  • 2015-07-11
  • 2022-01-15
  • 2018-10-07
  • 1970-01-01
  • 2017-07-29
  • 1970-01-01
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多