use YAML::Syck qw( Dump ); my %orig = qw( a 1 b 2 c 3 d 4 e 5 f 6 ); my %new; { my @keys; @new{ @keys } = @orig{ @keys = grep /[adf]/, keys %orig }; } print Dump( { orig => \%orig, new => \%new } ), "\n"; exit 0; __END__ --- new:   a: 1   d: 4   f: 6 orig:   a: 1   b: 2   c: 3   d: 4   e: 5   f: 6