#!/usr/bin/perl print "permute:\n"; print "[", join(", ", @$_), "]\n" for permute([1,2,3], [4,5,6], [7,8,9]); sub permute { my $last = pop @_; unless(@_) { return map([$_], @$last); } return map { my $left = $_; map([@$left, $_], @$last) } permute(@_); }