Beefy Boxes and Bandwidth Generously Provided by pair Networks vroom
laziness, impatience, and hubris
 
PerlMonks  

Re: Irregular expression evaluation

by chester (Hermit)
on Oct 24, 2005 at 03:24 UTC ( #502366=note: print w/ replies, xml ) Need Help??


in reply to Irregular expression evaluation

I remember reading something in Mastering Regular Expressions warning against mixing lexicals with (?{}) (though I may be mistaken). Note that this appears to work:

use warnings; use strict; gf (); gf (); sub gf { my $ins1 = '4 A -4 C -4 B 1 D'; our @inserts = (); $ins1 =~ /[\d+-]+(?: \w ([\d+-]+)(?{push @inserts, $1}))*/g; print "\n" . join ' ', @inserts; }


Comment on Re: Irregular expression evaluation
Select or Download Code
Re^2: Irregular expression evaluation
by pg (Canon) on Oct 24, 2005 at 03:46 UTC

    You are right. The binding was resolved at compiling time. There was a deep binding of @inserts inside that anonymous subroutine. That binding lasts beyond the scope of @inserts.

Re^2: Irregular expression evaluation
by Roy Johnson (Monsignor) on Oct 24, 2005 at 20:31 UTC
    Note that you can also work around it by declaring a lexical outside the scope of the sub:
    { my @inserts; sub gf { @inserts = (); my $ins1 = '4 A -4 C -4 B 1 D'; print "\nat the beginning: " . \@inserts . "\n"; print $ins1, "\n"; my $re = qr/[\d+-]+(?: \w ([\d+-]+)(?{print \@inserts, "\n"; p +ush @inserts, $1}))*/; $ins1 =~ /$re/g; print "\n" . join ' ', @inserts; } }
    You might notice that I created a regex variable. I had hoped that that would cause the regex to be bound at runtime, but no such luck. Creating an empty variable and inserting it in the regex does force runtime evaluation (at least inasmuch as it demands use of use re 'eval'), but it still doesn't make the (?{}) section use the current incarnation of @inserts.

    Caution: Contents may have been coded under pressure.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://502366]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (7)
As of 2014-04-20 06:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    April first is:







    Results (485 votes), past polls