in reply to matching and writing multiple line blocks

Perhaps something as simple as this:
my $name = "file000"; open STDOUT, ">>file000" or die "cannot append to file000: $!"; while (<>) { if (/Experiment/) { open STDOUT, ">>".(++$name) or die "Cannot append to $name: $!"; } print; if (/Reagent Lot/) { open STDOUT, ">>file000" or die "Cannot re-append to file000: $!"; } }
This puts each new section into file001, file002, file003, and so on, and anything outside those sections into file000.

Will that do, or are there other secret requirements? {grin}

-- Randal L. Schwartz, Perl hacker


Update: oops, I had an off-by-one error, and it's fixed now. Maybe I need to read up on pre-increment vs post-increment again. {grin}

Replies are listed 'Best First'.
RE: Re: matching and writing multiple line blocks
by Adam (Vicar) on Sep 01, 2000 at 19:40 UTC
    You can increment a string like that? Wow!
      From perldoc perlop:
      Auto-increment and Auto-decrement "++" and "--" work as in C. That is, if placed before a variable, they increment or decrement the variable before returning the value, and if placed after, increment or decrement the variable after returning the value. The auto-increment operator has a little extra builtin magic to it. If you increment a variable that is numeric, or that has ever been used in a numeric context, you get a normal increment. If, however, the variable has been used in only string contexts since it was set, and has a value that is not the empty string and matches the pattern /^[a- zA-Z]*[0-9]*$/, the increment is done as a string, preserving each character within its range, with carry: print ++($foo = '99'); # prints '100' print ++($foo = 'a0'); # prints 'a1' print ++($foo = 'Az'); # prints 'Ba' print ++($foo = 'zz'); # prints 'aaa' The auto-decrement operator is not magical.

      -- Randal L. Schwartz, Perl hacker