Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

Re: local & global function

by Jenda (Abbot)
on Oct 17, 2018 at 11:12 UTC ( #1224149=note: print w/replies, xml ) Need Help??


in reply to local & global function

Maybe what you are after is somewhat like this:

use strict; { # just a block my $test; # the lexical one sub foo { print "In foo: \$test=$test\n"; $test = "Hello world"; print "In foo: \$test=$test\n"; } sub bar { print "In bar \$test=$test\n"; } } my $test; # the global one print "Global \$test=$test\n"; foo(); print "Global \$test=$test\n"; bar(); print "Global \$test=$test\n";

The two functions are defined in a block and therefore share the lexical (please do not use the term local in Perl) variables declared within that block ABOVE the functions.

Jenda
Enoch was right!
Enjoy the last years of Rome.

Replies are listed 'Best First'.
Re^2: local & global function (closures)
by LanX (Archbishop) on Oct 17, 2018 at 12:30 UTC
    > The two functions are defined in a block and therefore share the lexical

    Additional note: this is a fine example for using Closures.

    The two functions are "closing" over the lexical variable $test.

    And this $test has a lexical (i.e. static) scope restricted to the block.

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

    PS: it also demonstrates that closure don't need to be anonymous. There is a widespread misconception in some other languages that "closure" is a synonym for "anonymous function".

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others romping around the Monastery: (8)
As of 2020-04-08 15:28 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    The most amusing oxymoron is:
















    Results (44 votes). Check out past polls.

    Notices?