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

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