Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much

Re: initialise state variable from list context, NOT!

by JavaFan (Canon)
on Sep 08, 2009 at 12:40 UTC ( #794119=note: print w/replies, xml ) Need Help??

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

There's no point giving the compiler a clue, as the compiler already knows what you are trying to do. And it's currently forbidden. The reason is that there are too many corner cases to let 'state LIST' be something that is intuitive all the time.

state $scalar is all that is allowed. Perhaps the best you can do is:

state $record = empty_record;

Replies are listed 'Best First'.
Re^2: initialise state variable from list context, NOT!
by Random_Walk (Prior) on Sep 08, 2009 at 14:17 UTC

    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?


    Pereant, qui ante nos nostra dixerunt!
      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;

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://794119]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others examining the Monastery: (4)
As of 2018-06-22 03:52 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (121 votes). Check out past polls.