use Data::Dumper; my @data = qw( 000- 0101 011- 1-0- ); print Dumper(\@data); @data = map { bits($_) } @data; print Dumper(\@data); sub bits { my $str = shift; if ($str =~ /-/) { my ($zero, $one) = ( $str, $str ); $zero =~ s/-/0/; $one =~ s/-/1/; return ( bits( $zero ), bits( $one ) ); } else { return $str; } } __END__ $VAR1 = [ '000-', '0101', '011-', '1-0-' ]; $VAR1 = [ '0000', '0001', '0101', '0110', '0111', '1000', '1001', '1100', '1101' ];