Хорошо, вам действительно нужно обрабатывать HTML с помощью соответствующего модуля, но я объясню проблемы
Во-первых, вместо экранирования всех этих слешей вы можете использовать другой разделитель для шаблона./.../
- это то же самое, что и m/.../
, но если вы используете m
(для «соответствия»), тогда вы можете выбрать другой разделитель.Здесь я использовал восклицательные знаки !
Во-вторых, нет смысла добавлять закрывающую двойную кавычку во второй захват или указывать все альтернативы: ноль, один или два подчеркивания.Метасимвол \w
соответствует символам «слово» и является таким же, как [0-9A-Za-z_]
, то есть буквенно-цифровыми или подчеркиванием.Вам просто нужно сопоставить как можно больше из них
Этот тест должен работать
$html =~ m!href="(/store/apps/category/)(\w+)!g
И чтобы ответить на ваш исходный вопрос, функция chop
удаляет последний символ строки.Он не будет работать на $2
, потому что это значение доступно только для чтения, поэтому вам нужно было бы объявить собственную переменную и сначала скопировать ее
my $capture = $2;
chop $capture;