in reply to Two arrays. One hash.

Just for TMTOWTDI, you could also write a function to zip the arrays:
sub zip { $#_ += @_ % 2; # force even nr of elements @_[ map +( $_, $_ + @_ / 2 ), 0 .. $#_ / 2 ] }
and then simply assign them to the hash:
my %hash = zip(@keys, @values);
This is less efficient, but unlike the hash slice solution it can easily be used in the middle of a long expression.

Makeshifts last the longest.