use warnings; use strict; my $data = do { open my $fh, '<', 'sample.txt' or die $!; local $/; <$fh> }; # slurp whole file into memory my $regex = qr{ ^ \s*APP>\sSTART_PARTU_8X8 \n ^ \s*APP>\sPARTITION_SPLIT \n (.*?) ^ \s*APP>\sEND_PARTU_8X8 $ }msx; if ($data=~$regex) { print $1; } #### use warnings; use strict; my $beg1 = qr/^\s*APP>\sSTART_PARTU_8X8$/; my $beg2 = qr/^\s*APP>\sPARTITION_SPLIT$/; my $end = qr/^\s*APP>\sEND_PARTU_8X8$/; open my $fh, '<', 'sample.txt' or die $!; my $prev_line; my $state = 'not_in_block'; while ( my $line = <$fh> ) { if ( $state eq 'not_in_block' ) { if ( $prev_line && $prev_line=~$beg1 && $line=~$beg2 ) { $state = 'am_in_block'; } } elsif ( $state eq 'am_in_block' ) { if ( $line=~$end ) { $state = 'not_in_block'; } else { print $line; } } } continue { $prev_line = $line } close $fh; #### START_PARTU_4X4 ........ START_PARTU_4X4 ........ START_PARTU_4X4 ........ START_PARTU_4X4 ........