# old way sub logfile { my $self = shift; my $new_name = shift; if ( !defined($new_name) ) { return $self->{logfile}; } if ( $new_name !~ m{^([\w/_\-\.]{1,80})$} ) { croak "I don't trust logfile name '$new_name'"; } $self->{logfile} = $1; } # New Moose Way subtype 'FilePath' => as 'Str' => where { $_ =~ m{^([\w/_\-\.]{1,80})$} } => message { "I don't trust file name '$_'" }; has logfile => ( is => 'rw', isa => 'FilePath', default => '/var/log/walrus.log' );