in reply to Re: Re: Fast Way to Combine Two Hashes
in thread Fast Way to Combine Two Hashes

Actually not. If you look at the original question, all values for the keys of %set2 should be set to undef. undef @set2{keys %set1}; leaves the original value in the hash. @set2{keys %set1}=undef; performs exactly as the original foreach $key (keys %set1) { $set2{$key} = undef; }.

In fact @set2{keys %set1}= (undef) x scalar keys %set1; is more correct (thanks to Zaxo for providing it), but might be slower.

Replies are listed 'Best First'.
Re: Re: Re: Re: Fast Way to Combine Two Hashes
by runrig (Abbot) on Jun 19, 2002 at 16:57 UTC
    all values for the keys of %set2 should be set to undef

    They are undef, try this:

    my %hash2; undef @hash2{qw(a b c)}; my %hash1; undef @hash1{qw(c d e)}; undef @hash2{keys %hash1}; print "$_ ",defined($hash2{$_})?"def\n":"undef\n" for keys %hash2;
    This technique works great when you want undefined don't care about the values. If you want to preserve defined values, then you have to do something like what Zaxo has.

    Update: corrected by mirod, anyway, this works great when working with sets and you don't care about the values.