package MyTypes; use 5.010; use MooseX::Types -declare => [qw( ExistingFile DataFromFile )]; use MooseX::Types::Moose qw( ArrayRef Str ); use Tie::File; # ABSTRACT: my demo types subtype ExistingFile => as Str => where { -e } => message { "file '$_' does not exist" }; subtype DataFromFile => as ArrayRef => where { ref $_ eq "ARRAY" } => message { "argument is not an ArrayRef" }; coerce DataFromFile => from ExistingFile => via { tie my @array, "Tie::File", $_; return \@array }; 1;