I am very unsure as to your question and the intent of your code?
I share your uncertainty. I think perl-diddler may have invented yet another way to write spaghetti code without using goto. A dispatch table approach such as you exemplify tends to be my knee-jerk approach to the sort of problem that I imagiine gave rise to the OP.
# local can only "mask" an "our" or a global variable ...
...
# A "my" variable cannot be "localized"
I tend to think of this a bit differently. My conception is that a my variable can be completely "localized" or isolated within a scope, whereas an our (or package global) variable cannot. The potential scoped isolation of lexical variables makes it very easy to reason about them, a great advantage.
c:\@Work\Perl>perl -wMstrict -le
"our $xyzzy = 33;
print qq{A: $xyzzy};
{
local $xyzzy = 55;
print qq{B: $xyzzy};
zot();
print qq{C: $xyzzy};
}
print qq{D: $xyzzy};
;;
sub zot { $xyzzy = 99; }
"
A: 33
B: 55
C: 99
D: 33
c:\@Work\Perl>perl -wMstrict -le
"my $xyzzy = 33;
print qq{A: $xyzzy};
{
my $xyzzy = 55;
print qq{B: $xyzzy};
zot();
print qq{C: $xyzzy};
zonk();
print qq{D: $xyzzy};
}
print qq{E: $xyzzy};
;;
sub zot { $xyzzy = 99; }
;;
sub zonk { my $xyzzy = 9999; }
"
A: 33
B: 55
C: 55
D: 55
E: 99
Update: But then there's PadWalker... (sigh)
Give a man a fish: <%-{-{-{-<