my $dim = 3; my @size = (4, 5, 6); my $var = 'a'; my $str = ''; for my $i (0 .. $dim - 1) { $str .= ' ' x $i . "for my \$$var (0 .. $size[$i] - 1) {\n"; $var++; } $var = 'a'; $str .= ' ' x $dim . '$array' . join '' => map {'[$ ' . $var++ . ']'} 1 .. $dim; $str .= " = 0;\n"; $str .= " " x ($dim - $_) . "}\n" for 1 .. $dim; #### for my $a (0 .. 4 - 1) { for my $b (0 .. 5 - 1) { for my $c (0 .. 6 - 1) { $array[$ a][$ b][$ c] = 0; } } } #### my $i = 0; my $sub = 'sub { $array' . join '' => map {'[$_[' . $i++ . ']]'} 1 .. $dim; $sub .= ' = $_[-1] }' . "\n"; #### sub { $array[$_[0]][$_[1]][$_[2]] = $_[-1] }