#! /usr/bin/perl -w # # Permutations (recursive) # Monday June 22, 1998 # sub permute { my @L = @{$_[0]}; my $n = $#L; my (@pm, @result) = ((), ()); if ($n == 0) { @result = ([$L[0]]); } else { my ($hd, @tail) = @L; my $ptail = permute(\@tail); foreach $e (@{$ptail}) { @pm = (); for ($i=0; $i<=$n; $i++) { @pm = @{$e}; $pm[$n] = $pm[$i]; $pm[$i] = $hd; @result = ([@pm], @result); } } } return \@result; } my $index = 1; my $l = permute(\@ARGV); $~ = 'STDOUT_TOP'; write; foreach $e (@{$l}) { $permutation = "@{$e}"; $~ = 'STDOUT'; write; $index++; } format STDOUT_TOP = # Permutation ----------- . format STDOUT = @>>>>>> @<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< "[$index]", $permutation .