if( $string =~ /e/g ) { my $start_pos = pos($string) - 1; while ($string =~ /fg/g) { print substr($string, $start_pos, pos($string) - $start_pos) , "\n"; } } # outputs efg efghijklfg efghijklfghijklabcdefg #### $string = 'abcdefghijklfghijklabcdefg'; while( $string =~ /e/g ) { my $start_pos = pos($string) - 1; while ($string =~ /fg/g) { print substr($string, $start_pos, pos($string) - $start_pos) , "\n"; } pos($string) = $start_pos + 1; } # outputs efg efghijklfg efghijklfghijklabcdefg efg