in reply to How keep the count...

The basis can be quite simple:
/\blazy\b(.*?)\bdog\b/
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.

The full sample code becomes:

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...
This prints:
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