#/usr/bin/perl -w use strict; use Algorithm::Loops qw< NestedLoops NextPermute >; my( $uniq )= ( @ARGV, 3 ); # 3 unique digits plus one duplicate digit my $digs= NestedLoops( [ [0..9], ( sub { [1+$_..9] } ) x ($uniq-1) ], ); my @digs; while( @digs= $digs->() ) { do { for my $dup ( 0 .. $#digs ) { for my $after ( $dup .. $#digs ) { my @result= @digs; splice @result, 1+$after, 0, $digs[$dup]; print @result, $/; } } } while( NextPermute( @digs ) ); }