use v5.14; use Data::Dumper; use IO::File; package MyClass { use Moo; has base_file => ( is => 'rw', required => 1, init_arg => 'base', coerce => sub { my $base_fh = IO::File->new( $_[0], '<' ) or die "$_[0]: $!"; $base_fh->binmode(":utf8"); return $base_fh; }, ); } my $object = MyClass->new(base => __FILE__); print Dumper($object->base_file);