- state VARLIST
- state TYPE VARLIST
- state VARLIST : ATTRS
- state TYPE VARLIST : ATTRS
-
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.
state はちょうど my と同様に、 レキシカルなスコープの変数を宣言します。 しかし、レキシカル変数がブロックに入る毎に再初期化されるのと異なり、 この変数は決して再初期化されません。 詳しくは "Persistent Private Variables" in perlsub を参照してください。
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.
複数の変数を指定する場合は、リストはかっこで囲まなければなりません。 かっこで囲まれたリストでは、undef はダミーの プレースホルダとして使えます。 しかし、そのようなリストでの state 変数の初期化は現在のところできないので、 これは無意味です。
Like my, local, and our, state can operate on a variable anywhere it appears in an expression (aside from interpolation in strings). The declaration will not apply to additional uses of the same variable until the next statement. This means additional uses of that variable within the same statement will act as they would have before that declaration occurred, or result in a strict 'vars' error, as appropriate.
my、local、および ourと同様に、stateは、 (文字列内の補間を除いて)式内の任意の場所で変数を操作できます。 この宣言は、次のステートメントまで、同じ変数の追加使用には 適用されません。 つまり、同じステートメント内でその変数を追加使用すると、 その宣言が発生する前と同じように動作するか、 厳密な'vars'エラーが発生します。 (TBR)
package main; use feature 'state'; our $x = 2; foo($x, state $x = $x + 1, $x); # foo() receives (2, 3, 2) foo($x, $main::x); # foo() receives (3, 2)
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.同じスコープや文で変数を再宣言すると、以前の宣言を「隠し」、 新しい実体を作って、以前の実体にアクセスできなくなります。 これは普通は望まれているものではなく、警告が有効なら、
shadow
カテゴリの警告が出ます。state is available only if the
"state"
feature is enabled or if it is prefixed withCORE::
. The"state"
feature is enabled automatically with ause v5.10
(or higher) declaration in the current scope.state は
"state"
機能 が有効かCORE::
を 前置した場合にのみ利用可能です。"state"
機能 は現在のスコープでuse v5.10
(またはそれ以上) を宣言した場合自動的に有効になります。