Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

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 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.

Mischief. Mayhem. Soap.

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

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (8)
As of 2014-10-25 12:02 GMT
Find Nodes?
    Voting Booth?

    For retirement, I am banking on:

    Results (143 votes), past polls