假设我有两个哈希。其中一个包含一组数据,这些数据只需要保留显示在另一个哈希中的内容。
例如
my %hash1 = (
test1 => { inner1 => { more => "alpha", evenmore => "beta" } },
test2 => { inner2 => { more => "charlie", somethingelse => "delta" } },
test3 => { inner9999 => { ohlookmore => "golf", somethingelse => "foxtrot" } }
);
my %hash2 = (
major=> { test2 => "inner2",
test3 => "inner3" } );
我想做的是删除 hash1 中的整个子哈希,如果它不作为 hash2{major} 中的键/值存在,最好没有模块。"innerX" 中包含的信息无关紧要,它必须单独放置(除非要删除 subhash,否则它可以消失)。
在上面的示例中,执行此操作后,hash1 将如下所示:
my %hash1 = (
test2 => { inner2 => { more => "charlie", somethingelse => "delta" } },
);
它删除了 hash1{test1} 和 hash1{test3},因为它们与 hash2 中的任何内容都不匹配。
这是我目前尝试过的,但它不起作用。这也可能不是最安全的事情,因为我在尝试从中删除哈希时循环了它。但是我要删除每个应该没问题的?
这是我这样做的尝试,但是 perl 抱怨:
不能使用字符串(“inner1”)作为哈希引用,而“严格引用”在使用
while(my ($test, $inner) = each %hash1)
{
if(exists $hash2{major}{$test}{$inner})
{
print "$test($inner) is in exists.\n";
}
else
{
print "Looks like $test($inner) does not exist, REMOVING.\n";
#not to sure if $inner is needed to remove the whole entry
delete ($hash1{$test}{$inner});
}
}