my $record; while(){ if(/^$/){ printme($record); $record = {}; } else{ ($label,$data) = split /:/; if(/\[(.*?)\]/){ $data = $1; } elsif(/\>(.*?)\{$label} = $data; } sub printme { my $record = shift; foreach (keys %{$record}){ print "$_:",$record->{$_},"\n"; } print "=" x 30,"\n"; }