【发布时间】:2021-11-28 16:58:07
【问题描述】:
我有一个文件被读取并拆分为 %ojects,%objects 填充如下所示。
$VAR1 = 'cars';
$VAR2 = {
'car1' => {
'info1' => '"fast"',
'info2' => 'boring'
},
'car2' => {
'info1' => '"slow"',
'info2' => 'boring info'
},
'car3' => {
'info1' => '"unique"',
'info2' => 'useless info'
}
};
$VAR3 = 'age';
$VAR4 = {
'new' => {
'info3' => 'rust',
'info4' => '"car1"'
},
'old' => {
'info3' => 'shiny',
'info4' => '"car2" "car3"'
}
}
};
我的目标是在数据库中插入诸如“car1 快速生锈、car2 缓慢闪亮、car3 独特闪亮”之类的数据,但我无法获得例如“根据 info4 的年龄进行匹配”..
my $key = cars;
my $key2 = age;
foreach my $obj (keys %{$objects{$key}}) { # for every car
@info1s = $objects{$type}{$obj}{'info1'} =~ m/"(.*?)"/g; # added to clean up all info1
foreach my $infos ($info1s) {
dbh execute insert $obj $infos # this gives me "car1 fast, car2 slow, car3 unique"
}
...
有人可以指出正确的方向来获取和存储带有相关 info1/info2 的 info4 吗?
谢谢!
【问题讨论】:
-
它有什么关系——是因为
info4的值car1是第二个hashref$VAR2中的一个键吗?似乎您只需要仔细迭代这些数据结构。顺便说一句,请在代码中添加显示的转储中的哪个数据结构。代码中只有一个 (%objects) 但转储显示多个。 -
是的,这就是它们之间的关系以及我正在努力弄清楚如何匹配的方式。代码示例应该只提供 VAR1 和 VAR2 的输出,因为我正在努力匹配和检索其余数据。如果我继续通过添加另一个 $obj2 和 $key2 来绕过漏洞(foreach),我最终会得到一堆条目,比如每辆车都会快速、缓慢和独特等。
-
二级hashref中的标签是否总是相同的,
info1到info4?还是仅仅是底部(最深)hashref 中的两个键值对? -
它总是相同的标签,所以答案被接受。使用 Data::Leaf::Walker 获得最深值的好技巧。我会看看我能不能玩弄这个来适应整个事情,太棒了!
标签: arrays perl hash reference