#!perl -l @maxvalues = (2, 5, 3); $input = 3; my @ids = (0) x $input; # assuming all loops start with 0 while(!$end) { # do something print "[@ids]"; # increase values starting from end of ids array $index = $#ids; while(1) { $ids[$index]++; if($ids[$index]<=$maxvalues[$index]) { last } else { # we reached limit on loop pointed by $index $ids[$index] = 0; $index--; if($index<0) # check stop condition { $end = 1 } } } }