use strict; use warnings; my @tables; my %data; my $last=''; while (my $line=) { chomp $line; if ( substr($line,0,2) eq '"$' || substr($line,0,1) eq '$') { $last=$line; push @tables,$line; } push @{$data{$last}},$line; } use Data::Dumper; print Dumper(\@tables); print Dumper(\%data); __DATA__ "$Bulletin Summary?" "$Person Absences?" "No","Person","Code","Period","Absence Reason" ...