Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery

Re^3: Named Captures

by Corion (Pope)
on Oct 06, 2010 at 11:20 UTC ( #863760=note: print w/replies, xml ) Need Help??

in reply to Re^2: Named Captures
in thread Named Captures

perl -wE"'abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)|(?<e>e)]g and do +{ say for keys %+ }" a

/g in scalar context matches once, %+ contains the first value, a.

perl -wE"()='abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)|(?<e>e)]g and + do{ say for keys %+ }" e

/g in list context matches all locations, and after having matched all, %+ contains the result of the last match, e.

perl -wE"my@a = 'abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)|(?<e>e)]g + and do{ say for keys %+ }" e

Same as above, except that you store the intermediate values.

perl -wE"my@a = 'abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)]g and do{ say for + keys %+ }" ## big fat nothing?

You have removed [de] from the matching class. %+ is a global variable and it (seems it) is cleared by the last failing match.

It might or might not be nice to have %+ retain the value(s) of the last successful match, but maybe you can work around this by padding your RE with .*$re.* to convert it into a truely floating RE.

Replies are listed 'Best First'.
Re^4: Named Captures
by BrowserUk (Pope) on Oct 06, 2010 at 11:27 UTC

    Okay. That begins to make sense ;)

    But, I discovered that I can get (sort of) what I was after by switching to %-

    perl -wE"()='abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)|(?<e>e)]g and + do{ say for keys %- }" e c a b d

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Not quite.
      () = 'abc' =~ /(?<a>a)|(?<f>f)/ and do {say for keys %-}; __END__ a f
      %- will have a key for every named capture in the pattern, whether that capture was involved in the match or not.

        Yes. Hence the "sort of". For my purpose, I just needed to ensure that lots of things got captured, I was never going to do anything with them. I was trying to heavily exercise both named captures and alternations in the hope of reproducing a memory leak.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://863760]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others cooling their heels in the Monastery: (6)
As of 2018-06-17 22:39 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (107 votes). Check out past polls.