diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2007-04-24 10:31:28 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2007-04-24 10:31:28 +0000 |
commit | b708784ed29bddb36a466db5f726fe7b7635e19b (patch) | |
tree | 92a122ed8f06a2782dcf5b8db39a49b27343fddb /pod/perlsub.pod | |
parent | 0d746ee5c1be80219aec2680f655ad5be66ccdf0 (diff) | |
download | perl-b708784ed29bddb36a466db5f726fe7b7635e19b.tar.gz |
Remove the code that handles assignment to state variables
p4raw-id: //depot/perl@31049
Diffstat (limited to 'pod/perlsub.pod')
-rw-r--r-- | pod/perlsub.pod | 23 |
1 files changed, 4 insertions, 19 deletions
diff --git a/pod/perlsub.pod b/pod/perlsub.pod index 5ecd346a14..a04dfc95c4 100644 --- a/pod/perlsub.pod +++ b/pod/perlsub.pod @@ -453,26 +453,11 @@ each time the gimme_another() function is called: Also, since C<$x> is lexical, it can't be reached or modified by any Perl code outside. -You can initialize state variables, and the assigment will be executed -only once: +Be aware that assignment to C<state> variables (as in C<state $x = 42>) +are executed every time; to initialize (or re-initialize) an undefined +state scalar, you can use, for example, the defined-or assignment : - sub starts_from_42 { state $x = 42; return ++$x } - -You can also, as a syntactic shortcut, initialize more than one if they're -all declared within the same state() clause: - - state ($a, $b, $c) = ( 'one', 'two', 'three' ); - -However, be warned that state variables declared as part of a list will -get assigned each time the statement will be executed, since it will be -considered as a regular list assigment, not one to be executed only once: - - (state $x, my $y) = (1, 2); # $x gets reinitialized every time ! - -B<Caveat>: the code at the right side of the assignment to a state -variable will be executed every time; only the assignment is disabled. So, -avoid code that has side-effects, or that is slow to execute. This might -be optimized out in a future version of Perl. + state $x //= initial_value(); =head3 Persistent variables with closures |