#!/usr/bin/perl use warnings; use strict; my $separator = '|'; my $input = ""; while () { $input .= $_; if ($input =~ m/ ^ # start of string ( # group 1 is (?: # group 2 not memo'd is [^|]*\| # any # not-pipe then a pipe ) {26} # repeated 26 times total $ # and reaching the end of string ) /sx # while matching \n with . ) { my $record = $1; $input =~ s/^\Q$record\E\n//s; # trailing trash?? my @arr = split /\|/, $record; # process @arr } } __DATA__ EN|486822|||KKJSKA|L|L00219796|STR, JASON A|JASON|A|STR|||||3710 |NORTH CANTON|OH|44720|||000|0003053964|I||| EN|486823|||YYYYYY|L|L00738657|OCID, SEAN M|SEAN|M|OCID|||||3846 Foxtail Lane |CINCINNATI|OH|45248|||000|0009544289|I||| EN|486824|||KXXXXP|L||DSBS, ANDREW J|ANDREW|J|DSBS|||||28835 STILXXXXXX|FARXXXXX HILLS|MI|48334|||000||I|||