讓我們假設我有兩個哈希值。其中一個包含一組數據,只需要保留其他散列中顯示的內容。如何根據另一個散列的鍵/值刪除一個[sub]散列?
例如
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 {}大鍵/值存在,最好不模塊。包含在「innerX」中的信息無關緊要,它只是單獨存在(除非刪除子哈希然後它可以消失)。
在上面這個操作後,預製HASH1會是什麼樣子的例子:
my %hash1 = (
test2 => { inner2 => { more => "charlie", somethingelse => "delta" } },
);
它刪除HASH1 {} TEST1和HASH1 {} TEST3因爲不匹配HASH2什麼。
這是我目前嘗試的,但它不起作用。也不是最安全的做法,因爲我正在循環散列而試圖從中刪除。不過,我正在刪除每個應該好嗎?
這是我在做這樣的嘗試,但perl的抱怨:
不能使用字符串(「inner1」)作爲HASH裁判而「嚴格裁判」在使用中
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});
}
}
是否有可能得到這一行的解釋: $ delete = 0,如果存在則爲last $ hash2 {major} {$ k} && $ hash2 {major} {$ k} eq $ inner; 我有點理解它,但我真的被'''和'last用法拋棄了。 – Zack 2010-04-03 21:38:13
@Zack感謝您的選中標記!更新答案中提供的解釋以及額外的獎勵。 – 2010-04-03 23:42:05