use strict; use warnings; use List::MoreUtils qw/zip natatime/; use Data::Dump qw/dump/; my @keys = qw {red blue red}; my @vals = (1, 2, 3); my %hash; my $it = natatime 2, zip @keys, @vals; while (my ($key, $value) = $it->()) { push @{$hash{$key}}, $value; } print dump(\%hash);