in reply to Special Variables and Multiple Regexp Matching

As a general thing providing a focused working stand alone sample script illustrating the problem will get you better answers. Consider:

use strict; use warnings; my @lines = split /\n/, <<LINES; token token token taken token tiki LINES chomp @lines; for my $line (@lines) { print "$line:\n"; while ($line =~ /token/gi) { print " >$`|$'<\n"; } }

Prints:

token token token: >| token token< >token | token< >token token |< taken token tiki: >taken | tiki<

while (lc($line) =~ /token/g) { loops until killed because each time through the loop lc($line) is re-evaluated so the regular expression restarts, so don't do that. So long as $line isn't changed the /g makes the regular expression carry on from where it left off last time through the loop, which is what you want.

True laziness is hard work