为什么这种尝试自定义类型约束的错误消息会失败?

Why does this attempt to customize a type constraint error message fail?

以下构造创建了一个按预期运行的类型约束(在设置属性时检查 "Roles::Thing" 角色)当属性因未通过约束而被拒绝时,我希望自定义错误消息"Not a thing" 出现;但是仍然给出默认错误消息。我做错了什么?

role_type 'DoesThing', {
   role => 'Roles::Thing',
   message => sub { "Not a thing." }
};

更新:我在原文中没有提供足够的上下文 post。我尝试使用新类型的方式是:

has things => (
  isa => 'ArrayRef[DoesThing]'
);

类型验证确实按预期工作;但是我仍然收到默认错误消息。我的自定义 "Not a thing" 错误消息没有像我预期的那样传播。

错误消息是您针对 ArrayRef 类型得到的消息,无论您在其中期望什么。

要获得自定义错误消息,您需要将 ArrayRef 合并到您的类型声明中:

subtype 'ArrayOfThings', 
    as 'ArrayRef[Roles::Thing]', 
    message { 'Not an array of things' };