To avoid throwing stuff in
$1 when you don't need to, there is a great feature called clustering in REs with the
(?:stuff here) stuff :).
Just change
/<a href="(mailto:)?([^"]*)">([^<"]*)<\/a>/g
to
/<a href="(?:mailto:)?([^"]*)">([^<"]*)<\/a>/g
And that way nothing will be put in
$1.
You may also want to consider
chomping
$2 and $3 because a newline could get in there somewhere and cause some trouble.
Hope I helped out. :):):) Later
$_.=($=+(6<<1));print(chr(my$a=$_));$^H=$_+$_;$_=$^H;
print chr($_-39); # Easy but its ok.