##
s/($regex)/transform($1)/ge
sub transform {
local $_ = shift;
if (/^(\[\[($http)]\[($title)]])/) { return transform_named($2,$3) }
elsif (/^($http)/) { return transform_http($1) }
...
}
##
##
while (1) {
if (/\G($named)/gc) { print transform_named($1) }
elsif (/\G($http)/gc) { print transform_http($1) }
...
elsif (/\G(.)/gcs) { print $1 }
else { last }
}