13 ok( ! defined state $uninit, q(state vars are undef by default) );
19 return ($x++, $y++, $z++);
22 my ($x, $y, $z) = stateful();
23 is( $x, 0, 'uninitialized state var' );
24 is( $y, 1, 'initialized state var' );
25 is( $z, 2, 'lexical' );
27 ($x, $y, $z) = stateful();
28 is( $x, 1, 'incremented state var' );
29 is( $y, 2, 'incremented state var' );
30 is( $z, 2, 'reinitialized lexical' );
32 ($x, $y, $z) = stateful();
33 is( $x, 2, 'incremented state var' );
34 is( $y, 3, 'incremented state var' );
35 is( $z, 2, 'reinitialized lexical' );
40 { state $bar = 12; $t = ++$bar }
46 is( $x, 11, 'outer state var' );
47 is( $y, 13, 'inner state var' );
50 is( $x, 12, 'outer state var' );
51 is( $y, 14, 'inner state var' );
55 # we use $outer to generate a closure
56 sub { ++$outer; ++state $x }
60 is( $f1->(), 1, 'generator 1' );
61 is( $f1->(), 2, 'generator 1' );
63 is( $f2->(), 1, 'generator 2' );
64 is( $f1->(), 3, 'generator 1 again' );
65 is( $f2->(), 2, 'generator 2 once more' );