Current Perl documentation can be found at perldoc.perl.org.
Here is our local, out-dated (pre-5.6) version:
You have to keep track of
N yourself. For example, let's say you want to change
the fifth occurrence of "whoever"
or "whomever"
into
"whosoever"
or "whomsoever"
, case insensitively.
$count = 0; s{((whom?)ever)}{ ++$count == 5 # is it the 5th? ? "${2}soever" # yes, swap : $1 # renege and leave it there }igex;
In the more general case, you can use the /g
modifier in a while
loop, keeping count of matches.
$WANT = 3; $count = 0; while (/(\w+)\s+fish\b/gi) { if (++$count == $WANT) { print "The third fish is a $1 one.\n"; # Warning: don't `last' out of this loop } }
That prints out: "The third fish is a red one."
You can also use a repetition count and repeated pattern like this:
/(?:\w+\s+fish\s+){2}(\w+)\s+fish/i;