Hi choroba,
Hm, the * prototype is a really cool idea, too bad about that... here's a less elegant workaround (also incorporates AnomalousMonk's suggestion). As far as I can tell, for single letter modifiers it's only m and s that cause a problem, the others (/ixpodualn) are fine, and multi-letter modifiers are fine as far as they don't clash with any other subs (like main, min, or sum) or operators (like and, although that's not a valid combination of modifiers). With the letters "msixpodualn" you can actually spell a lot of words :-)
use List::Util qw/min sum/;
sub qre (&;*) {
my $re = shift->();
eval 'qr/$re/'.(@_ ? lc shift : '') || die $@
}
say qre{ join '|', qw/foo bar/ }M;
say qre{ join '|', qw/foo bar/ }msx;
say qre{ join '|', qw/foo bar/ }Min;
say qre{ join '|', qw/foo bar/ }Sum;
__END__
(?^m:foo|bar)
(?^msx:foo|bar)
(?^min:foo|bar)
(?^ums:foo|bar)
Regards,
-- Hauke D