Perl 如何取消对散列数组散列中的项的引用

Perl 如何取消对散列数组散列中的项的引用,perl,Perl,我有一个这样构建的数据结构:- $ICVDWKey = "($LLX $LLY) ($URX $URY)"; ... push @{$ICVDWStats{$ICVDWKey}}, { ICVDensity=>$Density, ICVLayerArea=>$LayerArea, ICVWindowArea=>$WindowArea }; 我可以像这样取消引用它的内容 foreach $ICVDWKey (@AllICVDWCoords) {

我有一个这样构建的数据结构:-

$ICVDWKey = "($LLX $LLY) ($URX $URY)";
...
push @{$ICVDWStats{$ICVDWKey}}, {
    ICVDensity=>$Density,
    ICVLayerArea=>$LayerArea,
    ICVWindowArea=>$WindowArea
};
我可以像这样取消引用它的内容

foreach $ICVDWKey (@AllICVDWCoords) {
    foreach (@{$ICVDWStats{$ICVDWKey}}) {
        $ICVDensity = $_->{ICVDensity};
        $ICVLayerArea = $_->{ICVLayerArea};
        $ICVWindowArea = $_->{ICVWindowArea};
        ...
     }
 }
…一切都很好。然而,当另一个数据结构以相同的方式构建时,我遇到了问题,我需要在循环遍历原始数据结构时检查其内容,如上所述。这里有一个例子

foreach $ICVDWKey (@AllICVDWCoords) {
    foreach (@{$ICVDWStats{$ICVDWKey}}) {
        $ICVDensity = $_->{ICVDensity};
        $ICVLayerArea = $_->{ICVLayerArea};
        $ICVWindowArea = $_->{ICVWindowArea};
        ...
        if (exists ($ICC2DWStats{$ICVDWKey})) {
             $ICC2Density = $_->{ICC2Density};
             $ICC2LayerArea = $_->{ICC2LayerArea};
             $ICC2WindowArea = $_->{ICC2WindowArea};
             ...
        }
    }
}
我知道,
if exists$ICVDWKey
匹配工作正常,但我无法清晰地取消对ICC2DWStats哈希数据内容的引用。当两个数据结构之间的
$ICVDWKey
键匹配时,检索
ICC2*
数据的正确方法是什么?我确信这是
ICC2*
参考文献中的
$\ucode>,但我不知道应该用什么来代替


谢谢

不使用表示所需的
$ICC2DWStats
hashref以外的结构的
$\uucode>,您需要明确指定要从中提取的实际数据的哈希和键:

for $ICVDWKey (@AllICVDWCoords) {
    for (@{$ICVDWStats{$ICVDWKey}}) {
        $ICVDensity = $_->{ICVDensity};
        $ICVLayerArea = $_->{ICVLayerArea};
        $ICVWindowArea = $_->{ICVWindowArea};
        ...
        if (exists ($ICC2DWStats{$ICVDWKey})) {
             $ICC2Density = $ICC2DWStats->{$ICVDWKey}{ICC2Density};
             $ICC2LayerArea = $ICC2DWStats->{$ICVDWKey}{ICC2LayerArea};
             $ICC2WindowArea = $ICC2DWStats->{$ICVDWKey}{ICC2WindowArea};
             ...
        }
    }
}

请注意,您应该使用
use strict
使用警告

@Chris在您的例子中,内部
foreach
中的
$\ucode>是
{$ICVDWStats{$ICVDWKey}}}
的元素,而您希望访问
{$ICC2DWStats{$ICVDWKey}
。为了访问“并行”数组元素,您可能需要切换到迭代索引。