I'm sorry; I know that I must be mis-using the terms, but it seems to me that what I'm looking for is not contrary to what one could expect of lexicals. Making a change in an inner scope that is ‘seen’ by an outer scope is what I mean by “dynamic scoping” (although I probably shouldn't), and that is, of course, no problem. Having changes to a variable within a scope undone at the end of that scope is just what scoping means—it seems to me that it has nothing to do with lexical vs. dynamic. Again, aside from magic that can be associated to copying,
{
my $temp = $x; $x = $new;
...
$x = $temp;
}
does what I want, obviously without subverting Perl in XS-y ways.
Is it really the case that setting aside a value to be restored at the end of scope is what is meant by “dynamic scoping”? | [reply] [d/l] |
| [reply] |
Is it really the case that setting aside a value to be restored at the end of scope is what is meant by “dynamic scoping”?
Yes.
Well, sort of... what I would say is the key feature of "dynamic scoping" is that if you call some other sub it sees the current localized value of the variables. E.g. if you do this:
{
local $\="\t";
print_data( \@data );
}
then any print statements buried down in the print_data sub will now have tabs automatically appended to them.
With lexical scoping, if you say
my $some_variable = 1;
{
my $some_variable = 0;
do_some_stuff();
}
then inside the block you get a new variable that happens to have the same name as $some_variable, and you see that new variable only inside of the block you're looking at... you don't have to worry about there being any far-ranging effects inside of the sub do_some_stuff.
Does that help?
| [reply] [d/l] [select] |
What's the problem?
Wanna localise lexicals! Wanna wanna wanna!
| [reply] [d/l] |