http://www.perlmonks.org?node_id=794142


in reply to Re: initialise state variable from list context, NOT!
in thread initialise state variable from list context, NOT!

Thanks for the quick answer. The reason I thought I may get it to work with some hints for the compiler is that this is allowed

state %record; %record = ( getting => 'url', url => 'http://', match => '', getting => '', alarm => 'no', );

Is an empty hash considered as a safe case? Where is the border of what I can get away with?

Cheers,
R.

Pereant, qui ante nos nostra dixerunt!

Replies are listed 'Best First'.
Re^3: initialise state variable from list context, NOT!
by JavaFan (Canon) on Sep 08, 2009 at 16:21 UTC
    One of border cases is:
    sub foo { (my $foo, state $bar) = (f(), g()); ... } foo; foo; # Should g() be called?
    As for state %record;, that is allowed. It's state in a list assignment that is disallowed. But note that
    state %record; %record = ( ... );
    doesn't give you any benefits over
    my %record = ( ... );
    You will have to write it as
    state %record; %record = ( ... ) unless keys %record;