package FileReader; use Moose; use Moose::Util::TypeConstraints; use IO::File; subtype 'FileHandleFromStr', as 'FileHandle'; coerce 'FileHandleFromStr', from 'Str', via { IO::File->new("< $_") }; has file => ( is => 'ro', isa => 'FileHandleFromStr', coerce => 1, ); sub read_next_line { my $self = shift; return $self->file->getline; } 1 #### use Modern::Perl qw/2014/; use lib 'C:/Data/strawberry/script-chrome'; use FileReader; use Data::Dump qw /dump/; my $file = FileReader->new( file => 'C:/Data/strawberry/script-chrome/test.txt' ); while ( my $line = $file->read_next_line ) { print $line; }