sub unzip(&\%) { my $code = shift; my %hash = %{shift()}; my @retlist; while(my @list = each %hash) { push @retlist, $code->(@list); } return @retlist; } use Data::Dumper; my %h = qw(k1 v1 k2 v2); print Dumper [unzip {[$_[0], $_[1]]} %h];