@
не появляется в регулярном выражении. Он используется в качестве разделителя в операторе замещения.
Оператор подстановки обычно записывается как s/PATTERN/REPLACEMENT/
. PATTERN
является регулярным выражением, а REPLACEMENT
рассматривается как строка в двойных кавычках. В стандартной версии оператора в качестве разделителя используется символ косой черты (/
), но Perl позволяет программисту выбирать практически любой символ в качестве разделителя. Обычно это делается для того, чтобы избежать экранирования символов, которые появляются либо в шаблоне, либо при замене.
В вашем примере кода программист решил использовать символ @
в качестве разделителя. Это немного необычный выбор: -)
Поскольку шаблон включает в себя /
символов, их необходимо будет экранировать, если используется стандартный разделитель:
$line =~ s/\/\/.*//;
Это выглядит ужасно, и использование другого разделителя - хороший выбор. Я бы пошел с менее запутанным персонажем, как |
.
$line =~ s|//.*||;