Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
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.


Comment on Re: Scoping issues with code evaluation asserstions?
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (17)
As of 2014-07-29 16:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    My favorite superfluous repetitious redundant duplicative phrase is:









    Results (223 votes), past polls