#! /usr/bin/perl use strict; use warnings; use Clone qw{ clone }; use Test::More tests => 2; my $input_hash_ref = { key1 => { some_field => 'value1', key => 'key1', alt_key => 'alt_key1' }, key2 => { some_field => 'value2', key => 'key2', alt_key => 'alt_key2' } }; my $expected_hash_ref={ alt_key1 => { some_field => 'value1', key => 'key1', alt_key => 'alt_key1' }, alt_key2 => { some_field => 'value2', key => 'key2', alt_key => 'alt_key2' }, }; my $output_hash_ref = { map { $input_hash_ref->{$_}{alt_key} => $input_hash_ref->{$_} } keys %$input_hash_ref }; is_deeply($output_hash_ref, $expected_hash_ref, 'same inner hashes'); my $clone = clone($input_hash_ref); my $cloned_hash_ref = { map { $clone->{$_}{alt_key} => $clone->{$_} } keys %$clone }; is_deeply($cloned_hash_ref, $expected_hash_ref, 'cloned');