Scope of variables in a function

Dave Mitchell davem at iabyn.com
Mon Jun 3 00:25:28 BST 2013


On Sun, Jun 02, 2013 at 10:43:02PM +0100, Gordon Banner wrote:
> Also that would break
> 
> my $var = "outer";
> {
>     my $stashed_value = $var;
>     my $var = "inner";
>     ...
> }
> 

(except that it wouldn't). My example wasn't meant to be literal: it was
just a hand-wavy explanation of moving the *runtime* effects of my to the
start of the block. The compile-time effect (i.e. scope) was unaffected.
Sorry if this wasn't; clear.

NB: the run-time effect of 'my' is to push a note onto the save stack
saying "at scope exit, please decrement the reference count of this
lexical var, and do other misc bits of housekeeping"). This is why with

    my $x if 0;

and

    goto foo;
    my $x;
    foo:

the lexical doesn't get cleared at the end of scope, meaning its old value
is sill there on next entry to the block.


-- 
I've often wanted to drown my troubles, but I can't get my wife to go
swimming.


More information about the london.pm mailing list