sub expand_binary_patterns { map { my $l = length($_); my $q = $_; $q =~ y/-/./; grep { sprintf('%0'.$l.'b',$_) =~ /$q/ } 0 .. (2**$l)-1; } @_ } my @data = qw( 000- 0101 011- 1-0- ); @data = expand_binary_patterns( @data );