#!/usr/bin/perl use strict; use warnings; my ($stellen,@elemente)=@ARGV; die "Aufruf:\n $0 stellen element_a [element_b [element_c [ ...]]]\n" if(@elemente==0 || $stellen!~/^\d+$/); sub permutation($@) { my ($st,@arr) = @_; my @ret=(); my @cnt=map{$_=0}(1..$st); ende:while(1) { push(@ret,join('',map{$_=$arr[$_]}@{[@cnt]})); for my $i (0..$st-1) { if($cnt[$i]<@arr-1) { $cnt[$i]++; last; } else { $cnt[$i]=0; last(ende) unless( exists($cnt[$i+1]) ); } } } return @ret; } print "Elemente: ".join('; ', @elemente)."\n"; print "Stellen: $stellen\n"; print "Variantionen:\n"; print join("\n",&permutation($stellen,@elemente)),"\n";