Попробуйте что-то вроде этого:
use Regexp::Common qw /URI/;
$text =~ s|($RE{URI}{HTTP})(?!</a>)|<a href="$1">$1</a>|g
Ключевым моментом здесь является использование Regexp :: Common :: URI, который, вероятно, имеет более полное соответствие URL, чем все, что я мог придумать Также в конце я делаю отрицательное прогнозное утверждение , чтобы убедиться, что URL-адрес еще не находится в ссылке. Эта последняя часть не совсем тщательна, так как возможно, что кто-то может сделать что-то вроде этого:
<a href="http://www.mysite.com">http://www.mysite.com is my website</a>
Чтобы сделать это правильно, вам нужно проанализировать весь текст заявки и заменить только те URL-адреса, которые еще не являются частью ссылки.