永続的なレキシカル変数を宣言する
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 とは違い、同じスコープで再宣言するとエラーになる