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); #### $VAR1 = { '1' => [ '1', '1', '1', '1', '1' ], '2' => [ '2', '4', '8', '16', '32' ], '3' => [ '3', '9', '27', '81', '243' ], '4' => [ '4', '16', '64', '256', '1024' ], '5' => [ '5', '25', '125', '625', '3125' ] };