in reply to breaking up a file by delimiter

#!/usr/bin/perl # https://perlmonks.org/?node_id=1223630 use strict; use warnings; use Data::Dumper; $Data::Dumper::Indent = 0; local $/ = "\nXXX\n"; s/\nXXX\n\z//, tr/\n/ / for my @data = <DATA>; print Dumper \@data; __DATA__ This is a test. XXX This is a multiline test. XXX

Replies are listed 'Best First'.
Re^2: breaking up a file by delimiter
by navalned (Beadle) on Oct 07, 2018 at 13:48 UTC

    I don't generally like statement modifiers. However, this does exactly what I need. I think my main issue was I forgot while slurping my /^XXX$/ probably didn't work and I should have changed it to /\nXXX\n/.

      I don't generally like statement modifiers.
      You don't have to follow me on that, but statement modifiers can help making your code clearer and more concise.

      Consider for instance this (somewhat meaningless) example:

      while (<$IN>) { next if /^\s*$/; # remove empty lines next if /^\s*#/; # remove comments next if /ORA/i; # remove lines with Oracle warnings and errors next unless some_condition($_); last if /File processed/; # ... now do the actual processing of useful lines }
      If you wanted to do the same with regular conditionals, you would need about three times as many code lines, and it would probably end up being less clear.

      Update: added a missing closing parenthesis to the while condition.<\small>

        without statement modifiers :)

        while (<$IN> { /^\s*$/ and next; # remove empty lines /^\s*#/ and next; # remove comments /ORA/i and next; # remove lines with Oracle warnings and errors some_condition($_) or next; /File processed/ and last; # ... now do the actual processing of useful lines }

        I actually prefer this form. It's in the same spirit as open or die

        ( TMTOWTDI forever :)