my $n = 4; my @v = 0..$n-1; print "@v\n"; permute($n); sub permute($) { my $k = shift; return if $k==1; for (my $i=0;$i<$k;$i++) { permute($k-1); if ($i<$k-1) { my $t = $v[$k-1]; $v[$k-1] = $v[$k-2]; $v[$k-2] = $t; print "@v\n"; } } }