# We want to replace the $nth match of $regex in $value # with $replacement # OK, so doing the nth regex replacement in a string just # isn't going to be that readable, but at least it's # concise. I'll try to explain: # As we go through the regex matches we want to count # down from $nth to zero being when we want to replace. # $& is just what we matched, so we'll write that when # we're not replacing ie when $nth!=0. # qq{} is just quotation that saves us escaping ' or " in # the quotation string. # So here we're creating a string where $replacement is # parsed into quotations eg --$nth ? $& : qq{new text $1} $rep_eval = "--\$nth ? \$& : qq{$replacement}"; # Then here we have our usual regex search and replace # which we perform g(lobally) and e(val) twice. # 1st e(val) parses $rep_eval, and the 2nd evaluates the # " ? : " expression for each match. $value =~ s/$regex/$rep_eval/gee;