use List::Util qw(reduce); use Data::Dumper; my @c = (1, 2, 3, 4); my %d; reduce { $a->{$b} ||= {} } \%d, @c; print Dumper \%d;