Build your own "glob"... using the regex engine!
use strict;
use warnings;
my @data = qw( 000- 0101 011- 1-0- );
my ($re) = map "(?{''})(?:$_)(?{push \@results, oct \"0b\$^R\"})(?!)",
join '|',
map { local $_ = $_;
s/([01]+)/(?{\$^R.'$1'})/g;
s/-/(?:(?{\$^R.0})|(?{\$^R.1}))/g;
$_
}
@data;
local our @results;
{ use re 'eval'; '' =~ /$re/ }
local $, = ", ";
local $\ = "\n";
print @results;
In this case, the generated regex is:
/
(?{''})
(?:
(?{$^R.'000'}) (?:(?{$^R.0})|(?{$^R.1}))
|
(?{$^R.'0101'})
|
(?{$^R.'011'}) (?:(?{$^R.0})|(?{$^R.1}))
|
(?{$^R.'1'}) (?:(?{$^R.0})|(?{$^R.1}))
(?{$^R.'0'}) (?:(?{$^R.0})|(?{$^R.1}))
)
(?{ $push @results, oct "0b$^R" })
(?!)
/x