# Permutationen
use strict;
use warnings;

my @data = qw(1 2 3 4);
permute(\@data, []);

@data = qw(rot gelb gruen);
permute(\@data, []);

@data = qw(A M P E L);
permute(\@data, []);

sub permute
  {
  my @items = @{ $_[0] };
  my @perms = @{ $_[1] };
  if (@items)
    {
    my(@newitems,@newperms,$i);
    for $i (0 .. $#items)
      {
      @newitems = @items;
      @newperms = @perms;
      unshift(@newperms, splice(@newitems, $i, 1));
      permute([@newitems], [@newperms]);
      }
    }
  else
    {  print "@perms\n"; }
  }