use strict; use warnings; use Data::Dump::Streamer; my %hash = ( doubleCheeseBurger => 'burger', cheeseBurger => 'burger', cheeseSandwich => 'sandwich', tomatoSandwich => 'sandwich', ); my %rHash; push @{$rHash{$hash{$_}}}, $_ for keys %hash; Dump (\%hash, \%rHash); #### $HASH1 = { cheeseBurger => 'burger', cheeseSandwich => 'sandwich', doubleCheeseBurger => 'burger', tomatoSandwich => 'sandwich' }; $HASH2 = { burger => [ 'cheeseBurger', 'doubleCheeseBurger' ], sandwich => [ 'cheeseSandwich', 'tomatoSandwich' ] };