my $len = $str =~ tr/-//; my $max = (2 ** $len) - 1; my $pat = '^' . '([^-]*)-' x $len . '([^-]*)$';         for my $i ( 0 .. $max ) {               my $bits = sprintf("%03b", $i);                                       my $subs = '';   $subs .= '$' . ($_+1) . ((($bits >> $_) & 0x1) ? '-' : '')      for (0 .. $len-1);   $subs .= '$'.($len+1);               my $tmp;   eval("(\$tmp = '$str') =~ s/$pat/$subs/;");               push @retval, $tmp;                         }