On Saturday 04 December 2004 06:15 pm, Alexey Trofimenko wrote: > oh! that it. I've found example which could make it clear to me > > sub test { > return sub { > for 1..3 { > state $var = 1; > print $var++ > } > } > } > > $a = test; $a() for 1..3; print ';' > $b = test; $b() for 1..3; > > that could print, for different possible definitions of "state": > 1) 123123123;123123123 > 2) 123456789;123456789 > 3) 123456789;101112131415161718 > > looks like you meant third(!) variant.. but it doesn't make any sense for > me.
The idea is that $var's _visibility_ is tied to scoping: it's only accessible inside that set of braces, like a lexical. But its lifetime is like a package variable. It's initialized once, and then it lives its life in peace. As Larry said, you could emulate it by having a package variable and lexicalizing it with "our", but if you're only going to use it as a state variable, then why have it be potentially visible to the rest of the world? So "state" gives you a variable with a permanent lifetime, but lexical scope. It seems too simple to be wrong, to me :) --hobbs