in reply to How keep the count...
If it matches, then $1 will hold the string between these words. From there on, you can calculate the number of words between them, which seems to be more or less what you're after./\blazy\b(.*?)\bdog\b/
The full sample code becomes:
This prints:while (<DATA>) { if(/\blazy\b(.*?)\bdog\b/) { my $length = length $1; my @words = grep length, split /\W+/, $1; printf "Distance is %d characters, stepping %d words\n", $length, + 1+@words; } } __DATA__ The brown fox jumps over the lazy dog The lazy brown fox jumps over the quick dog The lazy fox jumps over the dog The lazy fox dog The fox jumps over the dog...
Distance is 1 characters, stepping 1 words Distance is 32 characters, stepping 7 words Distance is 20 characters, stepping 5 words Distance is 5 characters, stepping 2 words
|
|---|