use Algorithm::Loops qw( NestedLoops ); my @digits = (1..3); NestedLoops( [ (\@digits) x 4 ], sub { print( @_, "\n" ); }, );