in reply to fixed length records, reading lines and catalogue updates

This (untested) code might get you started.

open( FILE, "<filename") or die "Can't open file: $!\n"; my @lines = <FILE>; close( FILE) or die "Can't close file: $!\n"; my $LastWasZero = 0; foreach my $line (@lines) { chomp $line; my ($recType, $rest) = unpack "A2A*", $line; if ($recType = "00") { if ($lastWasZero) { # two consequative 00 recs my ($date,$headerNumber) = unpack "A10A20", $lastWasZero; #do delete processing on $headernumber $date... } my ($date,$headerNumber) = unpack "A10A20", $rest; $lastWasZero = $rest; next; } else $lastWasZero = ""; if ($recType eq "01" ) { my ($field1, $field2,....) = unpack "...", $rest; # process 01 records next; } if ($recType eq "02" ) { my ($field1, $field2,....) = unpack "...", $rest; # process 02 records next; } .... }

Coded for clarity rather than efficiency

Corrected cut&paste error & brain fade error