foreach my $toto (@ARGV) { if ( $toto =~ /-d=(\d+)/ ) { # Perhaps a description of what that slice # is doing would help the code maintainer :) print foreach teledecode( @telear[ split //, $1 ] ); } elsif ( $toto =~ /-s=([a-zA-Z_]+)/ ) { print smstype($1); # typo fixed by b10m (thanks) } else { print telecode($toto); } } { my @tab; sub teledecode { @tab = (); return arrangecode( '', 0, @_ ); } sub arrangecode { my ( $first, $i, @dat ) = @_; foreach my $j ( @{ $dat[$i] } ) { if ( $i < ( @dat - 1 ) ) { @tab = arrangecode( $first . $j, $i + 1, @dat ); } else { push @tab, $first . $j; } } return @tab; } }