state
declares a lexically scoped variable, just like my
. However, those variables will never be reinitialized, contrary to lexical variables that are reinitialized each time their enclosing block is entered. See "Persistent Private Variables" in perlsub for details.
If more than one variable is listed, the list must be placed in parentheses. With a parenthesised list, undef
can be used as a dummy placeholder. However, since initialization of state variables in such lists is currently not possible this would serve no purpose.
Redeclaring a variable in the same scope or statement will "shadow" the previous declaration, creating a new instance and preventing access to the previous one. This is usually undesired and, if warnings are enabled, will result in a warning in the shadow
category.
state
is available only if the "state"
feature is enabled or if it is prefixed with CORE::
. The "state"
feature is enabled automatically with a use v5.10
(or higher) declaration in the current scope.