has 'dir' => ( is => 'ro', isa => 'IO::Dir', required => 1 ); around BUILDARGS => sub { $_ = shift for my ($orig, $class); my %args = @_; die 'required dir missing' unless exists $args{dir}; return $class->$orig(dir => 'IO::Dir'->new($args{dir})) }