use Math::Cartesian::Product;
# this encodes the number of loops and their ranges
my @ranges = ( [ 0..1 ], [ 1..2 ], [2..3] );
# the code inside the braces is run for every combination
# of the ranges
cartesian {
print "indices: @_\n";
} @ranges;
# here's a version using a subroutine which sums up
# the indices (just to do something with them)
sub compute {
my $sum = 0;
$sum += $_ foreach @_;
print "sum of @_ = $sum\n";
}
cartesian \&compute, @ranges;