Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re^2: how to declare a local *subname=sub{}?

by AnomalousMonk (Archbishop)
on Oct 31, 2016 at 05:24 UTC ( [id://1174991]=note: print w/replies, xml ) Need Help??


in reply to Re: how to declare a local *subname=sub{}?
in thread how to declare a local *subname=sub{}?

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:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^3: how to declare a local *subname=sub{}?
by Marshall (Canon) on Oct 31, 2016 at 06:27 UTC
    We aren't that far off.
    #!usr/bin/perl use strict; use warnings; our $xyzzy = 33; print "A: $xyzzy\n"; { local $xyzzy = 55; print "B: $xyzzy\n"; zot(); # changes $xyzzy altough no return value # zot() can modify a global variable print "C: $xyzzy\n"; } # $xyzzy is now back at the A: value print "D: $xyzzy\n"; sub zot { $xyzzy = 99; #set global "our" var } __END__ A: 33 B: 55 C: 99 D: 33

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://1174991]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others taking refuge in the Monastery: (3)
As of 2024-04-19 21:29 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found