use Moose::Util::TypeConstraints; subtype 'MyStr', as 'Str'; coerce 'MyStr', from 'Undef', via { '' }; no Moose::Util::TypeConstraints; has foo => ( isa => 'MyStr', coerce => 1, ... );