Perlのstateとは・・?

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を利用してる感じですね。
(バリデートルールが変わらないので)

これうまく使えば、色々捗りそう。