#! /usr/bin/perl use strict; use warnings; use Data::Dumper; my $filename = q{monk.txt}; open my $fh, q{<}, $filename or die qq{cant open *$filename* to read: $!\n}; my (@db, @records); while (my $line = <$fh>){ chomp $line; if ($line =~ /BEGIN_GROUP VARIABLE,PM2\.5/ .. $line =~ /END_GROUP/){ push @records, $line; if ($line =~ /END_GROUP/){ push @db, [@records]; #warn Dumper \@db; @records = (); } } } for my $group (@db){ for my $record (@{$group}){ print qq{$record\n}; # split on comma to get the field # you need? } print q{*} x 10, qq{\n}; }