| 
             Регулярные выражения в Perl 
     Регулярные выражения используются для нахождения шаблонов в строках. Например, для того, чтобы найти в телефонной книге конкретное имя, или,например, все имена, начинающиеся с буквы 'a'. Работа с регулярными выражениями является одной из самых мощных и полезных, и в тоже время самых сложных для понимания особенностей Perl. Надеемся, что после прочтения этой статьи вы поймете, насколько это мощный и удобный инструмент. Получив некоторый опыт вы сможете использовать эти возможности с большой пользой для себя. Операторы
       Для работы с регулярными выражениями в Perl используются три оператора   - оператор сравнения (matching - m//), оператор подстановки (substitution s///) и оператор перевода (translation - tr///).
       Все три оператора используют переменную $_ по умолчанию, поэтому дальше, пока не будут представлены операции =~ и !~, будем пользоваться ею.
       Оператор сравнения проверяет, подходит ли проверяемое выражение под шаблон, и возвращает значение 1, если это так, и значение 0 в противном случае. Запись этого оператора состоит из буквы m, разделителя (чаще всего это косая линия - /, но в принципе это может быть почти любой символ), шаблона и еще одного разделителя (такого же, как и первый :).
  Оператор сравнения $_ = ; if (m/hello/) { print "hello user\n"; }
  if ($input{'siteurl'} =~ #http://#) { print $input{'siteurl'}; }
       В этом примере проверяется, есть ли в строке, полученной со стандартного входа, слово 'hello'. Если это так (оператор m// вернет значение 1), то на стандартный выход вернется фраза 'hello user'.
       Примечание:вообще-то символ 'm' является необязательным, поэтому оператор из этого примера может выглядеть просто как /hello/.
       Оператор подстановки находит в строке все подстроки, удовлетворяющие шаблону, и заменяет их некоторым другим значением. Запись этого оператора состоит из буквы s, указывающей на то, что это собственно оператор подстановки и исходного (что заменять) и подстановочного (на что заменять) шаблонов, разделенных разделителями.
       Оператор подстановки $_ = 'My name is Fred'; # oh no, my name is Jonathan! s/Fred/Jonathan/;
       В этом примере в строке $_ все слова Fred будут изменены на Jonathan.
       Оператор перевода также производит подстановку, но несколько другого характера - он используется для замены отдельных символом некоторыми другими (определенными) символами. Синтаксис этого оператора похож на синтаксис оператора подстановки, с тем отличием, что во-первых он очевидно начинается с букв tr, а между разделителями вставляются не шаблоны, а группы символов, первая - исходные символы, вторая - подстановочные, причем соответствующие символы должны стоять на одинаковых позициях в своих группах - если вы хотите заменить, например латинскую 'm' на кириллическую 'м', они должны стоять на одинаковых местах: 'm' - в первой группе символов, 'м' - во второй.
       Оператор перевода $_ = 'hi.there, my.name.is.jonathan,'; tr/.,/ !/;
       В этом примере все запятые будут изменены на восклицательные знаки, а точки - на пробелы. 
Модификаторы
       Возможности каждого из этих операторов можно расширить при помощии модификаторов. Модификаторы - это грубо говоря символы которые дописываются к оператору (например, так - s/fred/Jonathan/i), говоря о том, как ему нужно разбирать рабочее значение.
       Модификаторы для оператора сравнения: g - находит все найденные подстроки; i - игнорирует регистр символов в строке; m - рассматривает строку как многострочное значение; s - рассматривает строку как однострочое значение; x - позволяет использовать расширенные регулярные выражения;
  Модификаторы для оператора подстановки: e - вычисляет подстановочное выражение перед подстановкой; g - находит все найденные подстроки; i - игнорирует регистр символов в строке; m - рассматривает строку как многострочное значение; s - рассматривает строку как однострочое значение; x - позволяет использовать расширенные регулярные выражения.
  Модификаторы
  $_ = 'My name is Fred'; s/fred/Jonathan/i; # My name is Jonathan s/jonathan/routine()/ie; # My name is [something] Операции =~ и !~
       Операции =~ и !~ позволяют использовать с операторами m//, s/// и tr/// любые переменные, а не только $_, которая используется этими операторами по умолчанию.
       Оператор =~ выполняет те же функции, что и оператор присваивания '=' (в случае использования с операторами s/// и tr///) и оператор сравнения 'eq' (при использовании с оператором m//).
       Операция =~ $name = 'my name is Fred'; $name =~ s/fred/Jonathan/ig;
  $string = 'hello world'; if ($string =~ /hello/i) { print 'helloworlded in this string.'; }
       Аналогично, операция !~ используется так же как и операция 'ne' (ее написание подобно операции чисельного сравнения !=), используется только с оператором сравнения и означает отрицание удовлетворения шаблону.
       Операция !~ $string = 'good'; if ($string !~ /bad/) { print "hey, it's not too bad yet!"; } 
Память
       И напоследок - о возможности более удобно работать с результатами обработки регулярных выражений, а именно о хранении их в отдельных переменных. Такими переменными являются предопределенные $&, $`, $', и набор переменных $1, $2, ..., $9.
  Переменная $&
        Эта переменная предназначена для хранения фрагмента строки, который удовлетворил шаблону, заданному регулярным выражением. Это удобно в таких случаях, как, например, если нужно найти число в строке, но неизвестно, что это за число. Вот как это может выглядеть:
  $string = "error 404." $string =~ m/\d+/; $number = $&; # $number содержит "404"
  Переменные $` и $'
       Эти переменные служат для хранения фрагментов, которые не удовлетворили шаблону, а именно подстрок, которые стоят до и после результата соответственно. Другими словами, после операции, например, сравнения, значение исходой строки разделяется на три части - часть, которая подошла под шаблон, и фрагменты, которые идут перед ней и после нее. Эти части и помещаются в переменные $&, $` и $' соответственно. (Обратите внимание на то, что в первой переменной - обратная кавычка, а во второй - прямая). Посмотрим на предыдущий пример.
  $string = "error 404." $string =~ m/\d+/;
  $number = $&; # $number содержит "404" $before = $`; # $before содержит "error" $after = $'; # $after содержит "." Переменные $1..$9
       Эти переменные служат для хранения фрагментов строки, которые удовлетворили соответсвующим определенным фрагментам шаблона. В шаблоне фрагменты выделяются при помощи скобок. Каждому фрагменту выделяется номер в том порядке, в котором они расположены, и соответствующая переменная будет содержать его значение.
  $string = "this is to be uppercased"; $string =~ s/(upper\w+)/uc($1)/; # $string = "this is to be UPPERCASED"
  $string = "15 apples, 2 foos, 3 bars"; while ($string =~ m/(\d+) (\w+)/g) { print "$2: $1\n"; } # Выведет apples: 15 # foos: 2 # bars: 3              |