[Chicago-talk] appending hashes

Steven Lembark lembark at jeeves.wrkhors.com
Tue Nov 4 07:32:36 CST 2003

--On Sunday, November 02, 2003 13:25:10 -0600 Jay Strauss <me at heyjay.com> 

> Is there any shortcut (like a slice or something) to push on hash onto
> another:
> my %h = (a=>1, b=>2, c=>3);
> my %a = (d=>4, e=>5);
> push %h, %a; #doesn't work
> %h += %a; #doesn't work
> I did it manually like:
> map {$h{$_} = $a{$_}} keys %a;
> But, thought there may be a shortcut syntax

Assign the slice. You cannot "push" a hash, however, because they
are not ordered. Any assignment you make from one hash onto anohter
will overwrite existing contents.

Given you want the replacements then:

    @foo{keys %bar} = values %bar;

will do it for you -- with the caveat that existing values in
%foo will be overwritten with values from %bar.

That or:

    exists $foo{$_} or $foo{$_} = $bar{$_} for keys %bar;

will assign only new values to %foo.

Steven Lembark                                            2930 W. Palmer
Workhorse Computing                                    Chicago, IL 60647
                                                         +1 888 910 1206

More information about the Chicago-talk mailing list