use Data::Dumper; $Data::Dumper::Deepcopy = 1; my @a = qw/foo bar baz/; my @last = (1); push @last, { $_ => $last[-1] } foreach reverse @a; print Dumper( $last[-1] ); # result