#! /usr/bin/env perl use strict; use warnings; use Storable qw(dclone); my $max_foo = 4; my $max_bar = 3;; my %foo = ( a => undef, b => undef, s => undef, ); my %bar = ( x => undef, y => undef, foo => [ map { dclone(\%foo) } 1 .. $max_foo ], ); my @_bar = map { dclone( \%bar ) } 1 .. $max_bar; require Data::Dumper; print Data::Dumper->Dump( [ \@_bar ], [ "*_bar" ] );