#!/usr/bin/perl use strict; use warnings; use YAML::XS; use Data::Dumper; my $data; {local $/;$data = }; print Dumper Load $data; __DATA__ --- key1: &id01 subkey_a: asdf subkey_b: qwer key2: <<: *id01 subkey_a: foo subkey_c: bar ... #### $VAR1 = { 'key2' => { 'subkey_a' => 'foo', 'subkey_c' => 'bar', '<<' => { 'subkey_b' => 'qwer', 'subkey_a' => 'asdf' } }, 'key1' => $VAR1->{'key2'}{'<<'} }; #### #!/usr/bin/perl use strict; use warnings; use YAML::XS; use Data::Dumper; my $data; {local $/;$data = }; print Dumper mergekeys( Load $data ); sub mergekeys { my ($ref) = @_; my $type = ref $ref; if ($type eq 'HASH') { my $tmphref = $ref->{'<<'}; if ($tmphref) { die "Merge key does not support merging non-hashmaps" unless (ref $tmphref eq 'HASH'); my %tmphash = %$tmphref; delete $ref->{'<<'}; %$ref = (%tmphash, %$ref); } mergekeys($_) for (values %$ref); } elsif ($type eq 'ARRAY') { mergekeys($_) for (@$ref); } return $ref; } #### $VAR1 = { 'key2' => { 'subkey_b' => 'qwer', 'subkey_a' => 'foo', 'subkey_c' => 'bar' }, 'key1' => { 'subkey_b' => 'qwer', 'subkey_a' => 'asdf' } }; #### @_=qw; Just another Perl hacker,; ;$_=q=print "@_"= and eval;