http://qs1969.pair.com?node_id=11140441

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

How do our code evaluations in regex refer to the regex group captured, by name and/or relative way ? Try such
'foo' =~ /(?'name'(?=o)(\w+))(?{print $name})/ # or 'foo' =~ /(?'name'(?=o)(\w+))(?{print $-1})/ Number found where operator expected at (eval 23)
to only get failure.
How is the correct Perl's way ?
  • Comment on Code expressions in regex refer to the regex group captured, by name / relative
  • Download Code

Replies are listed 'Best First'.
Re: Code expressions in regex refer to the regex group captured, by name / relative
by haukex (Archbishop) on Jan 14, 2022 at 01:49 UTC

    See %+ and %-; the following prints "oo":

    use warnings; use strict; 'foo' =~ /(?'name'(?=o)(\w+))(?{print $+{name}})/;

    But also note the documentation of (?{...}):

    WARNING: Using this feature safely requires that you understand its limitations. Code executed that has side effects may not perform identically from version to version due to the effect of future optimisations in the regex engine. For more information on this, see Embedded Code Execution Frequency.
Re: Code expressions in regex refer to the regex group captured, by name / relative
by LanX (Saint) on Jan 14, 2022 at 02:13 UTC