in reply to Re^4: Weird syntax. What does this goto statement do?
in thread Weird syntax. What does this goto statement do?
I have a copy of Perldoc 5 version 8.8, which is what I use. I couldn't find state in there obviously, because it's an older documentation, and state seems to be a newer feature. But I don't understand why it's working on an older perl.
Because in the code you originally quoted in bold, the v5.10-and-newer state function is not being called. The confusion came because your followon post incorrectly described what you were seeing, and thus the subsequent correct explanation that state can be a built-in function didn't help you understand that specific code correctly. Specifically, you said,
But there's also an equal sign in this line and an arrow -> and a bareword "state"
But you didn't mention that the -> arrow was followed by the bareword "state" in braces . And ->{...} is the Arrow Notation , which even existed in a Perl as ancient as v5.8.
Thus, looking at the code you originally bolded:
goto &{$_[0]->{state} = \&stateReadLit};
The "bareword" state is not an instance of the state function, but rather the key to a hash referenced by the hashref $_[0], so the bareword is interpreted as a string "state", not the function state .
That one line of code is equivalent to the following, which might be more understandable to you:
$_[0]->{state} = \&stateReadLit; # assign the coderef to the stateRea +dLit subroutine to the 'state' element of the hash referenced by $_[0 +] goto &stateReadLit; # or goto &{ $_[0]->{state} };
To sum up: there is no surprise that Perl 5.8 can correctly interpret the bareword state in a hashref arrow-notation syntax construction, just like there is no surprise for $h{state} to refer to the state key of the %h hash.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^6: Weird syntax. What does this goto statement do?
by harangzsolt33 (Deacon) on Dec 30, 2023 at 18:02 UTC |