我有一个像这样构建的数据结构: -
$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哈希数据的内容。当ICC2*
个密钥在两个数据结构之间匹配时,检索$ICVDWKey
数据的正确方法是什么?我确信它是$_
引用中的ICC2*
,但我不知道应该使用什么。
谢谢!
答案 0 :(得分:2)
您需要显式指定要从中提取的实际hasn的哈希和键,而不是使用$_
来表示您想要的$ICC2DWStats
hashref之外的结构:
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;
和use warnings;
。