$re = "(?:$flags:$core)";
That doesn't work: too many ':' (colons):
c:\@Work\Perl\monks>perl -wMstrict -le
"my $string = '/.*uba$/i';
;;
my $flag = qr{ [msixpodual] }xms;
;;
my $convertable =
my ($core, $flags) = $string =~ m{
\A \s* / (.*?) / ($flag*) \z
}xms;
die qq{bad rx: '$string'} unless $convertable;
;;
my $re = qq{(?:$flags:$core)};
print $re;
print 'A: match' if 'uba' =~ $re;
"
(?:i:.*uba$)
Something like this works:
c:\@Work\Perl\monks>perl -wMstrict -le
"my $string = '/.*u\/ba$/i';
;;
my $flag = qr{ [msixpodual] }xms;
;;
my $convertable =
my ($pattern, $modifiers) = $string =~ m{
\A \s* / (.*?) / ($flag*) \z
}xms;
die qq{bad rx: '$string'} unless $convertable;
;;
my $rx = qr{(?$modifiers)$pattern};
print $rx;
print 'A: match' if 'u/Ba' =~ $rx;
;;
my $ry = qr{ \A foo $rx }xms;
print $ry
;;
print 'B: match' if 'foolubatU/bA' =~ $ry;
print 'C: match' if 'FoolubatU/bA' =~ $ry;
"
(?^:(?i).*u\/ba$)
A: match
(?^msx: \A foo (?^:(?i).*u\/ba$) )
B: match
Note that:
-
I go directly to qr// form.
-
The modifiers ($flag pattern) implemented vary by Perl version; see perlop.
Give a man a fish: <%-{-{-{-<