#! perl -slw use strict; use Data::Dump qw[ pp ]; my @accts; { local $/ = 'TAGEND'; while( ) { m[ (?=.* FIRSTNAME \s+ ( \S+ ) ) (?=.* LASTNAME \s+ ( \S+ ) ) (?=.* ACCOUNT \s+ ( \S+ ) ) (?=.* BILLAMOUNT \s+ ( \S+ ) ) ]xsm and push @accts, { firstname => $1, lastname => $2, account => $3, billamount => $4, }; } } pp \@accts; __DATA__