Я думаю, вы предполагаете, что круглые скобки вокруг регулярного выражения вызывают контекст списка для него. Что это не дело. Слева от оператора присваивания определяется контекст, и он скалярный. В скалярном контексте s /// возвращает количество успешных замен. Помещение круглых скобок в объявленную переменную заставляет ее делать то, что вы хотите, потому что это создает контекст списка.
Это:
my ($string) = $webpage =~ s/^$domain//;
Возвращает часть совпадений $ webpage: имя домена. Это, вероятно, не то, что вы хотите. Вы либо хотите код С.Марка:
$webpage =~ s/^$domain//;
my $linkFromRoot = $dbh->quote($root . $webpage);
Или это
my ($string) = $webpage =~ /^$domain(.+)$//;
my $linkFromRoot = $dbh->quote($root . $string);