永続的なレキシカル変数を宣言する
state
はレキシカルスコープ変数を宣言します。この点は my
と同じです。
しかし、state
で宣言された変数は同じスコープ内で再宣言することはできません。
この点が my
との大きな違いです。
詳細は perlsub の
"Persistent Private Variables" をご覧ください。
state
は "state"
feature
が有効の場合で利用可能です。または、CORE::
を前置しても利用可能です。
"state"
feature
は現在のスコープで use v5.10
(またはそれ以上のバージョン) とすることで自動的に利用できるようになります。
use feature 'state';
state $name = 'Taro';
"state"
feature を使わずに CORE::
を前置する場合は次の通りです。
CORE::state $name = 'Taro';
次のように同じスコープで state
を使って変数を再宣言するとエラーになります。
use feature 'state';
state $name = 'Taro';
state $name = 'Jiro'; # my とは違い、同じスコープで再宣言するとエラーになる