#!/usr/bin/perl -w use strict; use warnings; my @record_buffer; while () { print "INP (buff=" . scalar(@record_buffer) . "): $_"; my @data = split /\s+/, $_; if ($data[1] < 20) { if (@record_buffer > 3) { print_buffered_recs( "WORSE" ); } elsif (@record_buffer > 0) { print_buffered_recs( "BAD" ); } print_rec( \@data, "GOOD" ); } elsif ($data[2] > 5) { print_buffered_recs( "FAIR" ); print_rec( \@data, "XYZZY" ); } else { # We don't know yet, store the record push @record_buffer, [ @data ]; } } # At the end, you may still have buffered records, so be # sure to do something with them! print_buffered_recs( "EXTRA" ); sub print_buffered_recs { my $comment = shift; print_rec($_, $comment) for @record_buffer; @record_buffer = (); } sub print_rec { my $rRec = shift; my $comment = shift; print "OUT: ", join(", ", @$rRec, $comment), "\n"; } __DATA__ HI 28 0 FUNKY HI 27 1 FUNKY HI 26 3 FUNKY HI 25 2 FUNKY HI 24 3 FUNKY HI 19 6 FUNKY LO 1 11 ODD LO 3 6 ODD LO 4 1 WIERD SEL 5 1 ECCENTRIC SEL 2 1 N/A SEL 2 1 N/A SEL 2 1 N/A SEL 2 7 N/A OUT1 1 1 N/A OUT2 1 1 N/A HI 28 0 N/A HI 28 0 ODD