#!/usr/bin/perl -w use strict; use Data::Dumper; my @AoA = ( [1,2,3], [4,5,6], ); my @cloneAoA = map{[@$_]}@AoA; $AoA[0][1] = 99; $AoA[1]->[2] = 88; print Dumper \@AoA; print "the cloneAoA is still the same, but AoA changed!\n"; print Dumper \@cloneAoA; print "-------- now HoH ----------------\n"; my %HoH = ( 'a' => { 'x' => 1, 'y' => 2, }, 'b' => { 'xx' => 3, 'yy' => 4, }, ); my %cloneHoH; foreach my $key (keys (%HoH)) { $cloneHoH{$key} = { %{$HoH{$key}} }; } $HoH{'a'}{'x'} = 88; $HoH{'b'}{'yy'} = 99; print Dumper \%HoH; print "the clone is still the same, although %HoH changed!\n"; print Dumper \%cloneHoH; print "========= now HoHoH ==============\n"; my %HoHoH = ('x' => { 'ao' => { 'mx' => 1, 'my' => 2, 'mz' => 3, }, 'ap' => { 'nx' => 4, 'ny' => 5, }, }, 'y' => { 'bq' => { 'bx' => 6, 'by' => 7, }, }, ); #to clone the $HoHoH{'x'}{'ap'} sub-hash... my %xapClone = %{$HoHoH{'x'}{'ap'}}; $HoHoH{'x'}{'ap'}{'nx'} = 99; $HoHoH{'x'}{'ap'}{'ny'} = 88; print Dumper \%HoHoH; print "the %xapClone still has nx => 4 and ny => 5\n"; print Dumper \%xapClone; __END__ #output shown below.... in section