Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Документация, учебники по Perl.doc
Скачиваний:
3
Добавлен:
29.10.2018
Размер:
1.83 Mб
Скачать

Символьные ссылки

Мы рассмотрели, что происходит, если величина, используемая в качестве ссылки, не была определена ранее. Что же происходит, если она уже определена и не является жесткой ссылкой? В таком случае она обрабатывается как символьная ссылка. То есть значение скаляра рассматривается как имя переменной, а не прямая ссылка на переменную.

¯

$name = "foo";

$$name = 1; - то же самое, что $foo = 1;

${$name} = 2; - то же самое, что $foo = 2;

${$name x 2 } = 3; -то же самое, что $foofoo = 3;

$name->[0] = 4; -то же самое, что $foo[0] = 4;

@$name = (); - обнуляет массив @foo

&$name(); - вызывает &foo

Регулярные выражения

Perl позволяет использовать регулярные выражения. Для того чтобы пояснить, что же представляет из себя регулярное выражение приведем несколько примеров: /SWAP.*/ - соответствуют все слова начинающиеся со SWAP и заканчивающихся произвольным набором символов. Точка обозначает произвольный символ, звездочка - то, что символ, стоящий перед ней, входит в слово 0 и более раз. Все метасимволы, которые будут описаны ниже, бозначают вхождение того, что стоит перед ними. /\w*/ - соответствуют слова состоящие только из алфавитных, цифровых символов и символа подчерк. \w - соответствует алфавитным, цифровым символам и символу подчерк, звездочка - тому, что эти символы могут входить произволное количество раз. Здесь мы приведем только основные метасимволы. Для более подробной информации смотрите соответствующие страницы man по Perl.

¯

* соответствует 0 или более вхождений

+ соответствует 1 или более вхождений

? соответствует 1 или 0 вхождений

{n} соответствует ровно n вхождений

{n,} соответствует по крайней мере n вхождений

{n,m} соответствует по крайней мере n,

но не более m вхождений

Метасимвол * эквивалентен {0,}, + эквивалентен {1,} и ? эквивалентен {0,1}. Ограничений на величину m и n нет. Эта стандартная конструкция работает в ``жадном'' режиме, то есть: регулярному выражению a.*b будет соответствовать всевозможный набор слов начинающихся с символа a и кончающихся символом b, в том числе слова типа abcab. В таких словах есть подпоследовательности символов, которые также удовлетворяют условиям регулярного выражения. Если после каждого из описанных метасимволов поставить знак ?, то подобные последовательности будут опускаться. Шаблоны обрабатываются как строка в двойных кавычках, поэтому приведенные ниже последовательности также будут обрабатываться:

¯

\l - передвижение на символ вниз

\u - передвижение на символ вверх

А также все перечисленные ранее бакслэш-последовательности. В Perl-е определены также:

¯

\w - соответствуют алфавитные и цифровые

символы а также символ подчерк

\$W - соответствуют все символы не входящие

во множество символов w

\s - символы пробела, табуляции, возврата каретки

\S - все символы не входящие во множество символов

s

\d - цифровые символы

\D - нецифровые символы

Обратите внимание, что \w отмечает только отдельные символы, а не все слово. Чтобы отметить все слово нужно использовать \w+. Также определены следующие команды:

¯

\b - соответствуют границы слова

\B - соответствуют не-границы слова

\A - соответствуют только начало строки

\Z - соответствуют только конец строки

При использовании конструкции типа ( ... ), \<digit> подставляет подстроку из скобок с номером digit. Можно использовать скобки для отделения подшаблона. Если в скобках имеется более, чем 9 подстрок, то переменные $10, $11, ... содержат соответствующие подстроки. $+ возвращает то, чему соответствует последняя конструкция в скобках. $& возвращает подставленную строку. $` возвращает все перед подставленной строкой, $' возвращает все после подставленной строки.

$_ = 'abcdefghi';

/def/;

print "$`:$&:$'\n"; - напечатает abc:def:ghi

На этом мы закончим описание регулярных выражений, для более подробной информации читайте manual page.