It is not a union, it is an algebraic data type
I have no idea what that means. You described a type that could take one of two types of values, and that what ::Union does. I figured it would be a solution that falls within your mental model, and thus likely to work and to get promoted.
Your second "Simple demonstration" seems to be a bug
Filed as CPAN RT#58411
Funny, because this perfectly illustrates why I really don't like undef.
The problem has nothing to do with undef. The problem is sending control data in band. A value was reserved to mean "no coercion occurred". If the function had used zero instead of undef, it would suffer from the same bug.
Undef is only a problem if you think it's ok for you and only you to use undef despite a long and continuing history of usefully using undef in Perl.
In reply to Re^4: Moose type question
by ikegami
in thread Moose type question
by Sue D. Nymme
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |