Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Regex re_eval - requires explicit package name

by trizen (Hermit)
on Jan 20, 2013 at 10:36 UTC ( #1014279=perlquestion: print w/ replies, xml ) Need Help??
trizen has asked for the wisdom of the Perl Monks concerning the following question:

Hello dear Monks,

Today I've encountered a problem which, really, drives me crazy.
Here is a small portion of the code which illustrates my issue:
#!/usr/bin/perl use 5.010; use strict; use warnings; use re 'eval'; sub make_esc_delim { my ($delim) = @_; return qr{\Q$delim\E[^$delim\\]*+(?>\\.|[^$delim\\]+)*\Q$delim\E}s +; } my $str_dq = make_esc_delim(q{"}); my %bpairs; { local $" = q{}; foreach my $d ([qw~< >~], [qw~( )~], [qw~{ }~], [qw~[ ]~]) { my @ed = map {quotemeta} @{$d}; $bpairs{$d->[0]} = qr{ $ed[0] (?<content> (?> (??{$bpairs{$d->[0]}}) (?{print "After eval!\n"}) | (?> $str_dq | [^@ed] ) )* ) $ed[1] }xs; } } my $x = q~func{{xx|"}"} @{d}end}~; if($x =~ /$bpairs{'{'}/){ print "First matched: $&\n"; } if($x =~ /func$bpairs{'{'}/){ # here is the problem print "Second matched: $&\n"; }
Output:
After eval! After eval! First matched: {{xx|"}"} @{d}end} Global symbol "$d" requires explicit package name at (re_eval 9) line +1. Compilation failed in regexp at test.pl line 43.

The question is: why perl doesn't let me to add some text around the compiled regex that embeds reevaluation of itself?
Should I consider this a bug?
Is there any other way around this issue?

Currently, I'm using: perl 5, version 16, subversion 2 (v5.16.2) built for i686-linux-thread-multi

Thank you very much.

Comment on Regex re_eval - requires explicit package name
Select or Download Code
Replies are listed 'Best First'.
Re: Regex re_eval - requires explicit package name
by dave_the_m (Parson) on Jan 20, 2013 at 10:43 UTC
    It's a bug. Fixed in 5.17.1.

    Dave.

Re: Regex re_eval - requires explicit package name
by Anonymous Monk on Jan 20, 2013 at 10:50 UTC
      I vaguely recall that with this experimental feature, you're supposed to use dynamic/local vars instead of lexical/my vars
      That's because the code was exceedingly buggy and would usually use the wrong pad, resulting in unexpected behaviour or seg faults before 5.17.1 (for which I completely rewrote the feature). Its now safe and sane to use lexicals, modulo any new bugs I may have introduced.

      Dave.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1014279]
Approved by Corion
Front-paged by Lotus1
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (16)
As of 2015-07-28 15:39 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (257 votes), past polls