use strict; use warnings; my $input = 'ABC---'; sub insert { my( $sofar, $chars, $dashes ) = @_; print "$sofar\n" and return unless $chars or $dashes; insert( $sofar . substr( $chars, 0, 1), substr( $chars, 1 ), $dashes ) if $chars; insert( $sofar . substr( $dashes, 0, 1), $chars, substr( $dashes, 1) ) if $dashes; } insert( '', $1, $2 ) if $input =~ /^([^-]+)(-+)$/;