use strict; use warnings; use Data::Dumper; my @a = ( 1, 2, 3, "a" ); my %Hash = do { my $hashref = 1; $hashref = { $_ => $hashref } for reverse @a; %{$hashref}; }; print Dumper \%Hash;