./perl/test/listperm.pl

download original
#!/usr/bin/perl -w

use strict;


sub listPerms {
    my $size = 1 + $#_;
    if ($size <= 1) {
        return [@_];
    }
    else {
        my $firstEl = $_[0];
        my @subPermRefs = listPerms(@_[1 .. $size-1]);
        my @result = ();
        foreach my $subPermRef (@subPermRefs) {
            for (my $i=0; $i<$size; $i++) {
                push @result, [(@{$subPermRef}[0 .. $i-1], $firstEl, @{$subPermRef}[$i .. $size-2])];
            }
        }
        return @result;
    }
}


my @permRefs = listPerms(@ARGV);

foreach my $permRef (@permRefs) {
    print "@$permRef\n";
}

  
back to test

(C) 1998-2017 Olaf Klischat <olaf.klischat@gmail.com>