use Algorithm::Loops qw( NestedLoops ); my @params = ( [1..10], [-5..5], [0..15], [0, 1], [1..10], ); NestedLoops(\@params, \&function); sub function { print(join(', ', @_), "\n"); }