Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer
 
PerlMonks  

Re: Scoping issues with code evaluation asserstions?

by pernod (Chaplain)
on Jun 20, 2003 at 09:48 UTC ( #267497=note: print w/replies, xml ) Need Help??


in reply to Scoping issues with code evaluation asserstions?

As mentioned in other posts in this thread, embedded code constructs create closures. Jeffrey Friedl's 'Mastering Regular Expressions' talks about this on page 338 in 'A Warning About Embedded Code and my Variables'.

As diotalevi points out, only the instance of the variable seen at compile time is ever used. I tried to force recompilation of the regex by using string interpolation, but this was rejected by the compiler with the message:

Eval-group not allowed at runtime, use re 'eval' in regex m/^(a)(?{$placeholder = 1})/ at embed.pl line 12, <DATA> line 1.

I tried to use the re 'eval' pragma too, but then the pragma complained about modifying constant items in variable assignments.

A solution to your problem could be to use the aliasing properties of @_ (as described in perlsub) instead of explicit return values. This is just another global variable trick, though, but here goes:

#! /usr/bin/perl use strict; use warnings; sub regex { my ( $in ) = @_; $in =~ m/^(a)(?{$_[ 1 ] = 1})/; } while(<DATA>) { my $placeholder; &regex( $_, $placeholder ); print $placeholder . "." if $placeholder; } __DATA__ a b a abcd bcda

This returns 1.1.1., so at least it does what you asked it for.

pernod
--
Mischief. Mayhem. Soap.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://267497]
help
Chatterbox?
[LanX]: so Strangers can easily seize control of the children
LanX needs a smartwatch for his boss ...
[LanX]: darn, I lost a post in preview

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (12)
As of 2017-10-20 14:19 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    My fridge is mostly full of:

















    Results (263 votes). Check out past polls.

    Notices?