例如:
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"中包含的信息无关紧要,只需将其保留(除非要删除子哈希,然后它可以消失)。
在执行此操作后,如上面的示例所示,hash1将如下所示:
my %hash1 = (
test2 => { inner2 => { more => "charlie", somethingelse => "delta" } },
);
它删除了hash1{test1}和hash1{test3},因为它们在hash2中没有匹配项。
这是我目前尝试过的方法,但它不起作用。也许这不是最安全的做法,因为我正在循环遍历哈希表,同时试图从中删除。但是,我在每个地方都进行了删除,这应该没问题吧?
这是我的尝试,然而perl会报错:
在使用“strict refs”时,不能将字符串(“inner1”)用作HASH ref
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});
}
}