use strict; use warnings; use Data::Dump::Streamer; my %dnaLookup = ( wibble => 'AATCAA 2', wobble => 'AATCAA 1', plibble => 'GATCAA 3', plobble => 'GATCAA 1', ); my %reverseLookup; for my $key (keys %dnaLookup) { my ($dna, $loc) = split ' ', $dnaLookup{$key}; push @{$reverseLookup{$dna}}, [$key, $loc]; } Dump (\%reverseLookup);