Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options

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; }

Replies are listed 'Best First'.
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?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://502366]
[LanX]: I thought MST perl was obvious ;-)
[RonW]: I have so much accumulated in my memory that finding the right item at a given moment often fails

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (8)
As of 2017-08-18 20:40 GMT
Find Nodes?
    Voting Booth?
    Who is your favorite scientist and why?

    Results (310 votes). Check out past polls.