It occurs to me that there might be a use for a do-block. If no 'fieldname' string is present in the file, <$fh> will read to the end of the file. This will be a valid read. If the data of the read is returned as from a do-block, it can be tested to determine if a header was actually present. (The data could be returned from a "naked" block, but using a do-block is neater IMHO.)
Win8 Strawberry 5.8.9.5 (32) Thu 07/28/2022 11:22:44
C:\@Work\Perl\monks
>perl
use strict;
use warnings;
use Data::Dump qw(dd);
use constant FIELDNAME => 'fieldname';
open my $fh, '<', \<<END or die;
no valid header present
value1,value2
END
my $got_header = do { local $/ = FIELDNAME; <$fh>; };
dd $got_header; # for debug
$got_header =~ m{ \Q${ \FIELDNAME }\E \z }xms or die "no header";
my $header_line = FIELDNAME . <$fh>; # complete the line
# and so on...
^Z
"no valid header present\nvalue1,value2\n"
no header at - line 16, <$fh> line 1.
Give a man a fish: <%-{-{-{-<
|