Встроенные переменные Perl


Встроенные переменные Perl
Использование встроенных переменных Perl. Это такие переменные как $' , $& , $` , $^R , $n , \n , $+ , $* , @- , @+ ,
  • $' - подстрока, следующая за совпадением.
  • $& - совпадение с шаблоном поиска
  • $` - подстрока, расположенная перед совпадением
  • $^R - результат вычисления утверждения в теле шаблона
  • $n - n-ный фрагмент совпадения
  • \n - n-ный фрагмент совпадения вызываемый в самом шаблоне
  • $+ - фрагмент совпадения
  • $* - разрешает выполнять поиск в многострочных файлах
  • @- - спецмассив, который содержит начальную позицию найденного слова
  • @+ - массив, содержащий позицю последнего найденного слова

$& - совпадение с шаблоном поиска, при последней операции поиска или замены. В отличии от переменной $_, эту переменную переопределять как вздумается нельзя.

$' подстрока за совпадением с шаблоном поиска, её также можно только читать.

$` - подстрока, расположенная перед совпадением, разрешается только её чтение.

$^R - результат вычисления утверждения в теле шаблона для последнего вычисления шаблона, если в нем идет счет или вызывается внешняя программа:

$qwer="lala";
$qwer=~ /x(?{$var=5})/;
print $^R;
5
$+ - фрагмент совпадения в шаблоне, который в нем был последним в круглых скобках. Разрешается только чтение $+.

$* - разрешает выполнять поиск в многострочных файлах, булева переменная, если она взведена в 1, то символы шаблона поиска ^ и $ сопоставляются позициям перед и после внутренних символов новой строки, если 0, то от начала текста и до конца текста:

$kim="lala\nfa\eti\nzvuki...";
$kim=~~ /^eti/; #совпадение не нашлось
$*=1;
$kim=~~ /^eti/; #совпадение нашлось
$n - n-ный фрагмент совпадения:
print "$1 $2 $3\n" if(/^(\d)(\w)(\W)$/);
\n - n-ный фрагмент совпадения вызываемый в самом шаблоне, например поиск гиперссылок:
/a href=(['"])(.*?)\1>/
Например нужно занести в массив только цифры из строчки "12@#34@@#@@###34@@##67##@@#@#@34":
$_='12@#34@@#@@###34@@##67##@@#@#@34';
s/@/#/g;
s/(#)\1+/$1/g;
print join /\n/, split /#/, $_;
Регулярное выражение s/(#)\1+/$1/g; изпользует повторение переменной $1 (квантификатор +) и если оно есть, то заменяет все подряд идущие # между цифрами на одну #, содержащуюся в$1(переменная $1 существует, если часть шаблона или шаблон указать в круглых скобках).

Допустим нужно определить, все ли цифры числа различны. Попробуем найти хотя-бы одно повторяющееся число:

if(/(\d).*(?=\1)/g){
print "по крайней мере одна цифра $1 различна\n";
}

Выражение берет 1-ю цифру и ищет её совпадения со всеми остальными, если есть, то говорит, что найдено и заканчивает работу. Регулярное выражение берет первое число при помощи (\d) и начинает его сравнивать со всеми остальными числами при помощи .*(?=\1). Если первое число в строке уникально, регулярное выражение начнет сопостовлять второе число со всеми восемью оставшимися числами. Если и второе число в строке уникально, то берется третье число и сравнивается со всеми остальными. И т.д., если совпадение было найдено, то регулярное выражение возвращает true и заканчивает свою работу, даже если в строке еще есть повторяющиеся числа. Чтобы можно было просмотреть все повторяющиеся числа, можно воспользоваться модификацией предыдущего кода:

$_ = '2314152467';
my @a = m/(\d)(?=\d*\1)/g ; 
if (@a){
  print join(',',@a)," - Repeat\n";
}
else{
  print "Ok\n" ;
}
Этот усовершенствованный код работает до тех пор, пока не будут найдены все совпадения, если таковые вообще есть.

В perl 5.6 вводятся переменные @- и @+, комбинация которых может заменять переменные $`, $&, и $'. После совпадения шаблона переменная $-[0] содержит начало соответсвия текста шаблону, а переменная $+[0] содержит конец соответсвия текста шаблону. В начале поиска обе являются нулями. Это значит, что можно вычислить значения $`, $&, и $':

$do      = substr($stroka, 0, $-[0]);
$sovpalo = substr($stroka, $-[0], $+[0] - $-[0]);
$posle   = substr($stroka, $+[0]);
Например:
$test="11-231234";
$test=~/\d{2}-\d{6}/;
print "$-[0], $+[0]";
0, 9

Соответственное переменные $#- и $#- указывают размерность массивов @- и @+.

Переменная $^N.

Оценить Статью:  
1   2   3   4   5   6   7   8   9   10    

« Назад
SAPE все усложнил?

MainLink - простая и прибыльная продажа ссылок!

Последние поступления:

Стишки пирожки про Олега⁠⁠

Размещена 20 июня 2024 года

Олег купил презервативы
Проник в семидесятый год
И подарил их папе с мамой
Такой нелепый суицид

читать далее…

Размещена 10 августа 2020 года

Я по ТВ видел, что через 10 лет мы будем жить лучше, чем в Германии...
Я не понял, что это они с Германией сделать хотят?!

читать далее…

ТехЗадание на Землю

Размещена 14 марта 2018 года

Пpоект Genesis (из коpпоpативной пеpеписки)

читать далее…

Шпаргалка по работе с Vim

Размещена 05 декабря 2017 года

Vim довольно мощный редактор, но работа с ним не всегда наглядна.
Например если нужно отредактировать какой-то файл например при помощи crontab, без знания специфики работы с viv никак.

читать далее…

Ошибка: Error: Cannot find a valid baseurl for repo

Размещена 13 сентабря 2017 года

Если возникает ошибка на centos 5 вида
YumRepo Error: All mirror URLs are not using ftp, http[s] or file.
Eg. Invalid release/

читать далее…