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

Re^2: Bring Out Your New Perl Code

by grinder (Bishop)
on Dec 19, 2007 at 14:15 UTC ( [id://657876]=note: print w/replies, xml ) Need Help??


in reply to Re: Bring Out Your New Perl Code
in thread Bring Out Your New Perl Code

It's the exact difference between the following two code snippets:

BEGIN { my $var = 10; sub next { return ++$var; } }

And the following:

sub next { state $var = 10; return ++$var; }

Now let's have a show of hands, how many people prefer the First Way To Do It? ... hmm, I see no hands? I thought as much :)

Tip o' the hat to Roy Johnson for pointing out that it was a BEGIN block I wanted, not an lexical scope with a label BEGIN:. And you do need a BEGIN block, not a bare block, otherwise you can run into grief with uninitialised values (which is kind of the whole point).

• another intruder with the mooring in the heart of the Perl

Replies are listed 'Best First'.
Re^3: Bring Out Your New Perl Code
by sgt (Deacon) on Dec 20, 2007 at 00:13 UTC

    Actually you should compare using a bare block (no BEGIN) which is the standard (older) way to have "state" variables.

    I like 'state' but the old way is still useful if you need a pair of cooperating subs (or more):

    % steph@ape (/home/stephan) % % cat state_old.px #!/usr/bin/perl+ { my $var = 10; sub next1 { ++$var; } sub next1_odd { if ($var % 2 == 0) { ++$var; } else { ++$var; ++$var; } } } $\ = qq{\n}; print next1() for 1..5; print next1_odd(); % steph@ape(/home/stephan) % % perl+ -w state_old.px 11 12 13 14 15 17
    cheers --stephan

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others learning in the Monastery: (3)
As of 2024-04-16 05:51 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found