... $file = File->new('t/file7.test'); eval { # declare as local so default is restored on block exit local *CORE::GLOBAL::read = sub (*\$$;$) { return undef }; $file->header(); }; ... #### ... sub header { my ( $self ) = @_; my $seek_rc = $self->{FH}->seek($self->{Header}->{OFFSET}, SEEK_SET ); if ($seek_rc == 0) { croak( 'Cannot seek to absolute file position on opened file handle - ', $! ); } my $length = $self->{FH}->read(my $header, $self->{Header}->{Length}); # check if read() had an error croak( "Error in reading file header - $!") # pathological test unless defined $length; croak( 'Error in reading file header - Mismatch between expected length (', $self->{Header}->{Length}, ") and returned length ($length) byte count") unless $length == $self->{Header}->{_Length}; $header =~ s/(?:\015+)?\012.*$/\n/; # remove any garbage at end of header and replace with \n return $header; } ...