Rob Kinyon <[EMAIL PROTECTED]> writes:

>> Piers Cawley said:
>> in other words, some way of declaring that a subroutine wants to hang onto
>> every lexical it can see in its lexical stack, not matter what static 
>> analysis
>> may say.
>
> I'm not arguing with the idea, in general. I just want to point out
> that this implies that you're going to hold onto every single
> file-scoped lexical, leading to quite a bit of action-at-a-distance.

Well, duh. If eval string isn't a hearty pointer to the "This subroutine
deliberately takes advantage of action at a distance" then I don't know what
is.


> Maybe, instead, you should say "sub is lexical_stack(N)" where N is
> the number of scoping levels it will hold onto in addition to any
> lexical it actually refers to. I would have 0 be the innermost scope,
> 1 be the enclosing scope, etc.

Which is all very well, but you don't necessarily know how deep in the stack
you are. I want to be able to write something in such a way that evalling the
string works in exactly the same way as it would if I had just written a do
block in the first place.

    sub foo { my $x; ...; return sub { do {...} } }

It's an introspection thing. Most of the time you don't want it, but sometimes
you do and we really shouldn't be making that impossible.

Reply via email to