Очистка ссылок на найденный текст в регулярных выражениях

08.02.2013г. // Рубрики: Рецепты, Perl
Не все программисты (например, я) непрерывно помнят, что при использовании регулярных выражений, в случае несоответствия шаблона переменной, в конечном итоге в $1 и прочих $2 может оказаться всё, что угодно. И совсем не обязательно это самое "все, что угодно" является undef. Если код большой, то там скорее всего будет находится результат от предыдущего регэкспа. Поэтому, хотелось бы периодически опустошать эти специальные переменные - ссылки на найденный текст.
Вообще говоря, сама идея сомнительна - правильнее проверять возвращаемое значение от сравнения:
if ($str =~ /pattern/ ) {
    ....
}
Тем не менее, изредка бывают ситуации, когда хочется ставить условие по $1, $2, или даже по $&. Конструкция
undef $1;не сработает - ибо "Modification of a read-only value attempted". Существует простой выход - перед вашей регуляркой сделать
'' =~ m/()()()()/;Пустую строку сравниваем с пустым шаблоном и получаем пустые значения в специальных переменных, в этом примере вплоть до $4.
Не буду дискутировать, насколько приведённый приём отвечает "хорошему стилю", но кому-нибудь может оказаться полезен.

Рубрики