my %forwardhash = ( key1 => 'value1', key2 => 'value2', key3 => 'value3' ); my %reversehash = (); while ( my ( $key, $value ) = each %forwardhash ) { $reversehash{$value} = $key; } use Data::Dumper; print Dumper( \%reversehash );