Перезапись специальных переменных Perl регулярными выражениями

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Когда-то я стал писать на perl из-за встроенных в язык регулярных выражений. Просто пишешь "abc" =~ / (?<x> a) /x; и вуаля: устанавливаются переменные $&, $1, %+, %-, @-, @+, $`, $'.

Однако эти же переменные перезаписываются при использовании следующей регулярки:

"abc" =~ /a/;
print $&;  # -> a

"xyz" =~ /y/; 
print $&;  # -> y

На самом деле, у специльных переменных perl-а область видимости ограничена своим блоком, как и у переменных объявленных через my.

"abc" =~ /a/;
{
	"xyz" =~ /y/;
	print $&;  # -> y
}
print $&;  # -> a

Конечно использовать переменные от двух регулярок одновременно не выйдет - их придётся сохранить в локальных переменных. Например вот так:

"abc" =~ /a/;
my $x = $&;
{
	"xyz" =~ /y/;
	print "$x vs $&";  # -> a vs y
}
print "Конец строки: $'"   # -> Конец строки: bc

Если кто-то знает как сохранить все эти переменные в хеш кратко - напишите в комментариях: буду признателен. Я придумал сделать это только так:

"abc" =~ /(a)/;
%x = map {$_ => $$_} qw/& 1 ' `/;
use DDP; p %x;

# ->
{
    &   "a",
    `   ""
    '   "bc",
    1   "a"
}

Так же не следует забывать о том, что переменная $_ является не локальной, а суперглобальной:

$_ = "abc";
{
	$_ = "xyz";
	print;  # -> xyz
}
print;  # -> xyz

И тут придётся использовать local:

$_ = "abc";
{
	local $_ = "xyz";
	print;  # -> xyz
}
print;  # -> abc

У меня по этой теме - всё. А вам - удачного программирования.

Источник: https://habr.com/ru/post/583710/


Интересные статьи

Интересные статьи

Все «за» и «против» 1С-Битрикс, какие есть альтернативы и что выгоднее знать разработчику? Читать далее
Недавно на проекте интегрировал модуль CRM Битрикса c виртуальной АТС Ростелеком. Делал по стандартной инструкции, где пошагово показано, какие поля заполнять. Оказалось, следование ей не гаран...
Всем привет. Если вы когда-либо работали с универсальными списками в Битрикс24, то, наверное, в курсе, что страница детального просмотра элемента полностью идентична странице редак...
Есть статьи о недостатках Битрикса, которые написаны программистами. Недостатки, описанные в них рядовому пользователю безразличны, ведь он не собирается ничего программировать.
В статье описаны необходимые параметры сервера для оптимальной работы сайта на платформе 1С-Битрикс.