use Algorithm::Loops qw( NestedLoops ); my @arrays = ( [qw( red blue )], [qw( sm med lrg )], [ 1..4 ], ); NestedLoops( \@arrays, sub { print(join('-', @_), "\n"); }, );