Yes? How is that inconsistant with what I said?
$laddOne refers to
$add as a global variable.
$add has no lexical definition in scope of its use in
$laddOne, so it'll use the current global value.
Granted, when the anonymous subroutine that is referenced by $laddOne was created, the global value of $add was 1, but so what? That value isn't evaluated within the -dynamic- scope of the local.
I still don't see what I'm missing. Maybe I just came into the game late, and didn't have all the baggage associated with local() in my mind before the introduction of my(). I see local as "mask global variable" not as "create local variable". Your "counterexample" doesn't show where I'm wrong.