*******Block A******** iSCSI_Storage=0 User=Admin IP=15.178.209.111 *****end of block A****** *******Block B******** iSCSI_Storage=1 User=Admin_1 IP=15.178.209.111 *****end of block B****** *******Block C******** iSCSI_Storage=2 User=Admin_2 IP=15.178.209.111 *****end of block C****** use strict; use warnings; my @blocks; my $block = ""; while () { if (/^Q*******E/ .. /^Q*****end ofE/) { $block .= $_; if (/^Q*****end ofE/) { push @blocks, $block; $block = ""; } } } my $data = shift @blocks; print $data if verify_block($data); print @blocks; sub verify_block { ... # enter code here } __DATA__ *******Block A******** iSCSI_Storage=0 User=Admin IP=15.178.209.111 *****end of block A****** *******Block B******** iSCSI_Storage=1 User=Admin_1 IP=15.178.209.111 *****end of block B****** *******Block C******** iSCSI_Storage=2 User=Admin_2 IP=15.178.209.111 *****end of block C******