そっか!e修飾子を利用した時は置換部分は関数以外は入れたらダメなんですね。

$i =~ s/\[\[(.+?)\]\]/<a href="&url_enc($1)">$1<\/a>/eg;

だとエラーが出るんで何でだろうとずっと思ってたんです。
ありがとうございます。勉強になりました。