Этот пример показывает работу директивы
$_='ab'; our $o=1; my $m=1; / (?{ local $o }) (?: a (?{ $o++; $m++ })| ab (?{ print "\$o=$o, \$m=$m" }) ) $ /x;
На сей раз напечатается это:
$o=1, $m=2
Этот пример показывает работу директивы local во встроенном коде.
Не забывайте в конце регулярного выражения запоминать значения локализованных переменных, т.к. при выходе за регулярное выражение они утрачиваются.
Если объявить переменную my внутри регулярного выражения, то в других блоках встроенного кода переменная с этим именем не будет соответствовать той переменной, что была объявлена. Она либо будет создана заново как глобальная, либо, если переменная с этим именем уже существует до регулярного выражения, она будет отождествлена с ней. При возврате такая переменная не будет восстанавливать свои старые значения. Вот два примера:
$_='ab'; our $o=1; / (?{ my $m=10; local $o }) (?: a (?{ $o++; $m++ })| ab (?{ print "\$o=$o, \$m=$m" }) ) $ /x;
Напечатается
$o=1, $m=1
Мы видим, что во втором встроенном коде переменная $m создалась заново с неопределенным значением, затем к нему применили ++ и получили 1. И это значение потом использовалось при печати.
$_='ab'; our $o=1; my $m=10; / (?{ my $m=5; local $o }) (?: a (?{ $o++; $m++ })| ab (?{ print "\$o=$o, \$m=$m" }) ) $ /x;
Здесь напечатается
$o=1, $m=11
Во втором и третьем встроенном коде использовалась переменная $m, которая была создана до регулярного выражения.
Директиву local можно комбинировать с присваиванием значения этой переменной.
Например:
local ($ctop) = $ctop+1;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий