Does this behavior make sense to anyone? When you've got a regex
with captures in it, the captures don't work if the regex is
stashed in a variable and then interpolated into a regex.
Do capture groups need to be defined at the top level where the
regex is used?
{ # From a code example in the "Parsing" book by Moritz Lenz, p. 48,
section 5.2
my $input = 'There are 9 million bicycles in beijing.';
if $input ~~ / (\d+) \s+ (\w+) / {
say $0.^name; # Match
say $0; # 「9」
say $1.^name; # Match
say $1; # 「million」
say $/;
# 「9 million」
# 0 => 「9」
# 1 => 「million」
}
}
say '---';
{ # Moving the pattern to var which we interpolate into match
my $input = 'There are 9 million bicycles in beijing.';
my $pattern = rx{ (\d+) \s+ (\w+) };
if $input ~~ / <$pattern> / {
say $0.^name; # Nil
say $0; # Nil
say $1.^name; # Nil
say $1; # Nil
say $/; # 「9 million」
}
}
In the second case, the match clearly works, but it behaves as
though the capture groups aren't there.
raku --version
Welcome to 𝐑𝐚𝐤𝐮𝐝𝐨™ v2020.10.
Implementing the 𝐑𝐚𝐤𝐮™ programming language v6.d.