package MyFile; use Moo; has _fh => { is => 'rw' }; sub BUILD { my( $self, @args ) = @_; $self->_fh( do { open( my $fh, q{<}, $self->frobnicate_path() ) or die qq{Can't open frobnicated path: $!\n}; $fh; } ); return; } sub frobnicate_path { my( $self ) = shift; return qq{WHATEVER.txt}; } sub get_next_line { my( $self ) = shift; return readline( $self->_fh ); } sub DEMOLISH { if( $self->_fh ) { close( $self->_fh ) or warn qq{Problem closing frobnicated path: $!\n}; } } 1; __END__