in reply to (Golf) Per Mutations

A non-recursive solution, 138 characters, and doesn't suffer from problems with repeated elements.
#!/usr/bin/perl -w use strict; use Data::Dumper; my @b = p( 1, 2, 3 ); print Dumper( @b ); sub p { my@a=[];for(0..@_){@a=map{my@b=@$_;my@c=@_;for(@b){my$e=$_;for(1..@c +){my$d=shift@c;last if$d eq$e;push @c,$d}}@c?map{[@b,$_]}@c:[@b]}@a}@ +a }

Dr. Michael K. Neylon - || "You've left the lens cap of your mind on again, Pinky" - The Brain