Perlのstateとは・・?
2015年1月7日
Data::Validatorで使ったstateですが、そもそもこれ何よ?って話。
use 5.10.0; sub hoge { state $hoge = shift; return $hoge; } say &hoge('aaaa'); say &hoge('bbbb'); # 出力 # -> aaaa # -> aaaa
ま、変数宣言ですね。
スコープ内だけ使えるのはmyと同じ。
ただし、値が保持されてる。
(2回目以降、初期化がされない)
上のコードだと、1回目に‘aaaa’が入ってるので、2回目に‘bbbb’を送っても出力されるのは‘aaaa’。
Data::Validatorの場合は、何度呼ばれても最初のオブジェクトを使いまわす為にstateを利用してる感じですね。
(バリデートルールが変わらないので)
これうまく使えば、色々捗りそう。