#!/usr/bin/perl -w

sub union1 {
    my %union = ( );

    while ( @_ ) {
        # Just keep accumulating the keys, slice by slice.
        @union{ keys %{ $_[0] } } = ( );
        shift;
    }

    return \%union;
}

sub union2 { return { map { %$_ } @_ } }

sub union3 { +{ map { %$_ } @_ } }

@Canines     { qw(dog wolf)      } = ( );
@Domesticated{ qw(dog cat horse) } = ( );

$union1 = union1(\%Canines, \%Domesticated);
print join(" ", keys %$union1), "\n";

$union2 = union2(\%Canines, \%Domesticated);
print join(" ", keys %$union2), "\n";

$union3 = union3(\%Canines, \%Domesticated);
print join(" ", keys %$union3), "\n";
