On Tue, Apr 14, 2015 at 08:58:27PM -0400, Nathan Gray wrote:
> I've run into a snag, in that my strptime processing in Perl 5
> relies on building a string that looks like a regex with named
> captures, and then interpolating that into a real regex.
>[...]
> my $pattern = Q/$<greeting>=[hello]/;
> my $string = Q/hello/;
>[...]
Just an idea: instead of building strings to be interpolated into
a regex, could you just build regexes directly?
my $pattern = rx/$<greeting>=[hello]/;
my $match = "hello" ~~ / <pattern=$pattern> /;
The resulting string is captured into $match<pattern><greeting>;
The second statement can also be written as:
# captures into $match<pattern><greeting>
my $match = "hello" ~~ / $<pattern>=$pattern /;
# captures into $match[0]<greeting>
my $match = "hello" ~~ / $<0>=$pattern /;
Hope this is useful, or at least illustrative.
> Of course, there may be a better way, since regex interpolation
> seems frowned upon in Perl 6.
I think it's more that we treat regexes as first class components (actually
closures)... rather than EVALing strings with metacharacters, we just
build regex expressions and interpolate them directly.
Pm