use strict; use Data::Dumper; sub Recurse { my $n = shift || 0; if ($n <= 0) { return {}; } else { my $val = [ map { $n ** $_ } (1 .. 5) ]; return { $n => $val, %{Recurse(--$n)} }; } } my $powers = Recurse(5); print Dumper($powers);