in reply to how to reg-exp match across multiple lines?

my $file = join '', <IN>; my @titles = $file =~ /_\[\d+\](.+?)_/sg;

Replies are listed 'Best First'.
Re^2: how to reg-exp match across multiple lines?
by Aristotle (Chancellor) on Jul 09, 2002 at 01:42 UTC
    Avoid join "", <FH>; It has to separate the file into records first, build a list from them, only to then go on to glue that back together into a string. The universally applicable approach is what japhy already posted: { local $/ = undef; $file = <FH> } This temporarily disables the input record separator, so that a single read will gobble the entire file. Another approach which I like even better as it works less "noisily", however is not universally applicable: sysread FH, $file, -s $filename; This only works when you know the filename and have the filehandle positioned at the start of the file, but is the ideal approach when these prerequisites are fulfilled.

    Makeshifts last the longest.

      -s can take a filehandle as argument as well.
      open my $fh => "/etc/motd"; print -s $fh, "\n"; __END__ 13 $ wc -l /etc/motd 13

      Abigail