Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number

Re: Re^2: Closure Confusion

by kabel (Chaplain)
on Oct 17, 2002 at 06:54 UTC ( #205939=note: print w/replies, xml ) Need Help??

in reply to Re^2: Closure Confusion
in thread Closure Confusion

thanks to you both for clarification. in fact that is the way things are going.

the real problem i think is that the code gets created at compile time. stringification cannot happen since the code has not run yet. so variables stay what they are (even with a hypothetical stringification operator).

the same is for the anonymous sub enclosed in an eval (). i could imagine that stringification then works (if only the operator would exist) ... but an eval is expensive, and more than one eval is even more expensive ;)

Replies are listed 'Best First'.
Re^4: Closure Confusion
by Aristotle (Chancellor) on Oct 17, 2002 at 12:54 UTC
    Oh, eval will let you do this: push @closures, eval "sub { print "\Q$j\E" }";

    (Note that if you don't quotemeta the variable, you open yourself up to all sorts of headaches - and a security hole if $j contains user input dependent data.)

    But why would you want that? Just create a unique copy of the lexicals in question during each loop iteration and you'll be fine. There's no reason to resort to eval STRING for this job. As all others have already proposed:

    my $my_j = $j; push @closures, sub { print $my_j };

    Makeshifts last the longest.

      i agree with the proposed solution. but thats not the point:

      the only thing i was interested in was: is it possible? yes, it is; but only with "runtime subroutine compilation".

      i think this attitude is ... err ... not that welcome here :|

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://205939]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (8)
As of 2018-06-21 22:29 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (120 votes). Check out past polls.