Сделал вот так:
$pattern = qr/\-\w\~\\\/\:\@\#\$\%\[\]\?\!\=\&\./;
$message =~ s/((?:http:\/\/|www\.)[$pattern]+?)([\.\,\!\?]*[^$pattern]|\Z)/<a href=\"$1\">$1<\/a>$2/g;
предполагалось, что ссылка должна прерваться любым символом, не входящим в $pattern или концом строки, причем если перед ним стоит N точек, запятых, ! и ?, то они не включаются в ссылку.
однако, у конструкции (
http://some.domain.com/test). в ссылку включается также закрывающая скобка ')'

Других ошибок пока не было замечено. Что неправильно, объясните?
Добавлено:
теперь исправил на
/((?:
(?:https?|ftp):\/\/|www\.)[$pattern]+?)([\.\,\!\?
\)]*
(?:[^$pattern]|\Z
))/
Со скобкой больше проблем нет, но
зачем ее необходимо включать???
И еще, посоветуйте, кто знает хорошую книжку по регекспам