#!/usr/bin/perl package Foo; use Moose; use Moose::Util::TypeConstraints; enum 'Status' => qw(success error pending); has 'status' => (is => 'rw', isa => 'Status|Undef'); package main; use strict; use warnings; my $o = Foo->new; foreach (undef, 'success', 'bar', 'error') { $o->status($_); printf "status: %s\n", $o->status; }