in reply to Re^2: skip junk lines in csv before header
in thread skip junk lines in csv before header

The do is actually redundant, he can use a basic block for localizing the $INPUT_RECORD_SEPARATOR aka $/

use v5.12; use warnings; use Data::Dump qw/pp dd/; say pp $/; # show default say my $x = "HEADER\n" x 3 . "fieldname: BLA BLA\n" . join $/, 1..5; open my $fh, '<', \$x; # ignore anything prior to "fieldname" { local $/ = "fieldname:"; <$fh> }; say pp $/; # back to default say "-" x 10; say "fieldname:" . <$fh>; # till end of line

"\n" HEADER HEADER HEADER fieldname: BLA BLA 1 2 3 4 5 "\n" ---------- fieldname: BLA BLA

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery

Replies are listed 'Best First'.
Re^4: skip junk lines in csv before header
by AnomalousMonk (Archbishop) on Jul 28, 2022 at 15:28 UTC

    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:  <%-{-{-{-<

      well, yes if you want to capture the first 'readline', a do block is better, because of all the scoping.

      Cheers Rolf
      (addicted to the Perl Programming Language :)
      Wikisyntax for the Monastery