my ($flag,@lines); my $d='Dataentry'; sub process { push (@lines,"$_[0]\n"); $flag ||= $_[0]=~ m@>bbbbbb<@s; @l ='' if ($_[0]=~m@@s); if (($_[0]=~ m@<$d>@s)&&($flag)) { pop @lines; say "<$d>"; print reverse @lines; say ""; @lines = ''; $flag = 0; } } process $_ for reverse split '\n';