Perlfaq4'e göz atın: İki karmayı nasıl birleştiririm . Perl belgelerinde halihazırda pek çok iyi bilgi vardır ve bir başkasının cevaplamasını beklemek yerine hemen alabilirsiniz. :)
İki karmayı birleştirmeye karar vermeden önce, her iki karma da aynı anahtarlar içeriyorsa ve orijinal karmaları olduğu gibi bırakmak istiyorsanız ne yapmanız gerektiğine karar vermelisiniz.
Orijinal hash'leri korumak istiyorsanız, bir hash'i (% hash1) yeni bir hash'e (% new_hash) kopyalayın, ardından diğer hash'deki anahtarları (% hash2 yeni hash'e ekleyin. Anahtarın% new_hash içinde zaten mevcut olup olmadığı kontrol ediliyor) size kopyalarla ne yapacağınıza karar verme şansı verir:
my %new_hash = %hash1;
foreach my $key2 ( keys %hash2 )
{
if( exists $new_hash{$key2} )
{
warn "Key [$key2] is in both hashes!";
...
next;
}
else
{
$new_hash{$key2} = $hash2{$key2};
}
}
Yeni bir karma oluşturmak istemiyorsanız, yine de bu döngü tekniğini kullanabilirsiniz; sadece% new_hash'i% hash1 olarak değiştirin.
foreach my $key2 ( keys %hash2 )
{
if( exists $hash1{$key2} )
{
warn "Key [$key2] is in both hashes!";
...
next;
}
else
{
$hash1{$key2} = $hash2{$key2};
}
}
Bir hash'in diğerinden anahtarların ve değerlerin üzerine yazması umurunuzda değilse, bir hash'i diğerine eklemek için bir hash dilimi kullanabilirsiniz. Bu durumda,% hash2'deki değerler, ortak anahtarlara sahip olduklarında% hash1'deki değerlerin yerini alır:
@hash1{ keys %hash2 } = values %hash2;