В шаблоне регулярных выражений последовательность "{2}" означает совпадение точно двух экземпляров предыдущего шаблона.
Таким образом, \ d {2} будет соответствовать только двум цифрам, тогда как ваш входной текст имел пять цифр на этом этапе.
Если вам не нужны завершающие цифры, вы можете удалить их, используя \ d * вне скобок для захвата.
Кроме того, если ваш шаблон содержит косые черты, попробуйте использовать другой разделитель, чтобы избежать экранирования, например
if ($line =~ m{<amount>(\d*\.\d{2})\d*</}) { $amount = $1; }
Кроме того, если вы хотите проанализировать XML, вы можете рассмотреть возможность использования библиотеки XML, такой как XML :: LibXML .