Maybeを知った。

package Test;

use Mouse;

has hoge => (
    is  => 'rw',
    isa => 'Str',
);

package main;

my $test = Test->new;
$test->hoge( undef );

こんな感じで、isaでStrを指定したアトリビュートにundefを書き込もうとすると怒られる。

理由は簡単で、Str型は文字列ではないundefを書き込むことができないというだけ。

これを知らなかった。勉強不足ですね。


文字列とundefも入れたいという場合は、以下のようにMaybeを使うといい。

has hoge => (
    is  => 'rw',
    isa => 'Maybe[Str]',
);