in reply to greping DB ERROR

The problem is you have data on two lines but you are reading the file in a line at a time. You need to remember your state if you want to do it linewise. There are other ways to do it, possibly with split or by setting $/. Here is an example:

while(<DATA>){ chomp; if ( m/^ERROR/ ) { $error = 1; push @errors, $_; } else { next unless $error; $error = 0; if ( m/ORA\-00001/ ) { pop @errors; # ignore values and pop off @errors stack; } else { $errors[-1] .= " $_"; # add error string to line msg } } } print "$_\n" for @errors; __DATA__ ERROR at line 2: ORA-00002: blah2 junk line junk line junk line ERROR at line 1: ORA-00001: unique constraint (TBUSOP_1UQ) violated junk line junk line junk line ERROR at line 3: ORA-00003: blah3

cheers

tachyon