Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: Scoping issues with code evaluation asserstions?

by pernod (Chaplain)
on Jun 20, 2003 at 09:48 UTC ( [id://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
Domain Nodelet?
Node Status?
node history
Node Type: note [id://267497]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others cooling their heels in the Monastery: (5)
As of 2024-04-23 18:35 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found