Читаем Введение в Perl полностью

print «$+\n»; # '2'

print «$&\n»; # '1 два 2'

print «$`\n»; # 'Один '

print «$'\n»; # ' и три 3'

}

Перл версии 5 содержит дополнительные конструкции шаблонов:

(?#комментарий) – комментарий в теле шаблона.

(?:шаблон) – группировка как и '' но без обратной ссылки

(?=шаблон) – «заглядывание» вперед.

Например /\w+(?=\t)/ соответствует слову за которым идет табуляция но символ '\t' не включается в результат.

Пример:

$s = «1+2-3*4»;

if ($s =~ /(\d)(?=-)/) # Наити цифру за которой стоит '-'

{

print «$1\n»; # Результат '2'

}

else { print «ошибка поиска\n»;}

(?!шаблон) – «заглядывание» вперед по отрицанию.

Пример:

$s = «1+2-3*4»;

if ($s =~ /(\d)(?!\+)/) # Наити цифру за которой не стоит '+'

{

print «$1\n»; # Результат '2'

}

else { print «ошибка поиска\n»;}

(?ismx) – «внутренние» модификаторы. Удобно применять в шаблонах где например нужно внутри шаблона указать модификатор.

Правила регулярного выражения. (regex)

1. Любой символ обозначает себя самого если это не метасимвол. Если вам нужно отменить действие метасимвола то поставьте перед ним '\'.

2. Строка символов обозначает строку этих символов. 

3. Множество возможных символов (класс) заключается в квадратные скобки '[]' это значит что в данном месте может стоять один из указанных в скобках символ. Если первый символ в скобках это '^' – значит не один из указанных символов не может стоять в данном месте выражения. Внутри класса можно употреблять символ '-' обозначающий диаппазон символов. Например a-z один из малых букв латинского алфавита, 0-9 – цифра и т.д.

4. Все символы, включая специальные можно обозначать с помощью '\' как в языке С.

5. Альтернативные последовательности разделяются символом '|' Заметьте что внутри квадратных скобок это обычный символ.

6. Внутри регулярного выражения можно указыват «подшаблоны» заключая их в круглые скобки и ссылаться на них как '\номер' Первая скобка обозначается как '\1'.

<p>Операторы и приоритеты</p>

В Перл ассоциативность и приоритетность операторов аналогична языку C Ниже перечислены все операторы в порядке уменьшения приоритета, в начале строки указана ассоциативность.

ассоц. операторы

– –

левая термы и левосторонные списковые операторы

левая ->

– ++ –

правая **

правая ! ~ \ унарные + и -

левая =~ !~

левая * / % x

левая + – .

левая << >>

– именованные унарные операторы

– < > <= >= lt gt le ge

– == != <=> eq ne cmp

левая &

левая | ^

левая &&

левая ||

– ..

правая ?:

правая = += -= *= и т.д.

левая , =>

– правосторонние списковые операторы

левая not

левая and

левая or xor

Термы и левосторонние списковые операторы.

Любой терм имеет самый высокий приоритет. К терму относятся переменные, кавычки и их операторы, арифметические и логические выражения в скобках, любые функции с параметрами в скобках. Фактически таких функций нет так как это просто унарные и списковые операторы просто они ведут себя подобно функциям с параметрами в скобках. Подробно смотри главу «Функции».

Если после любого спикового оператора ( print, и т.д.) или унарного оператора (chdir, и т.д.) следует левая круглая скобка, то операторы внутри скобок имеют наивысший приоритет. Так же как и обычные функции.

Если скобки отсутсвуют то приоритет списковых операторов или наивысший или наименьший в отношении операторов справа или слева от него.

Например:

@i = ('a ','b ', print 'c ', 'd ');

print «\n»,@i,"\n";

Результат:

c d

a b 1

Здесь мы имеем списковый оператор print. Для запятых слева от него он имеет наименьший приоритет, но повышает приоритет правой запятой.

Поэтому правая запятая воспринимается как параметр для print и печатается 'c d' а левая просто записывает код завершения операции в массив @i и последний print показывает это.

Оператор '->'

Так же как в С или С++ это инфиксный оператор переадрессации. Если справа от него стоит [...] или {...} выражение, то правая часть может быть непосредственной или символической ссылкой на массив или хеш.

В противном случае правая сторона это метод или простой скаляр содержащий имя метода, а правая или объект или имя класса. Подробно смотри главу «Классы».

Операторы ++ (инкремент) и (декремент).

Эти операторы работают так же как и в С. Если оператор стоит перед переменной то значение переменной изменяется на 1 и полученной значение используется. Если после переменной то ее величина изменяется после применения.

Употребление инкремента к строковым переменным в Перл имеет одну особенность.

Каждый символ остается в своем классе (большие, малые, цифры) и учитывается перенос предыдущего символа. Таким образом строковые переменные с цифрами работают как числовые переменные.

Пример:

Перейти на страницу:

Похожие книги

97 этюдов для архитекторов программных систем
97 этюдов для архитекторов программных систем

Успешная карьера архитектора программного обеспечения требует хорошего владения как технической, так и деловой сторонами вопросов, связанных с проектированием архитектуры. В этой необычной книге ведущие архитекторы ПО со всего света обсуждают важные принципы разработки, выходящие далеко за пределы чисто технических вопросов.?Архитектор ПО выполняет роль посредника между командой разработчиков и бизнес-руководством компании, поэтому чтобы добиться успеха в этой профессии, необходимо не только овладеть различными технологиями, но и обеспечить работу над проектом в соответствии с бизнес-целями. В книге более 50 архитекторов рассказывают о том, что считают самым важным в своей работе, дают советы, как организовать общение с другими участниками проекта, как снизить сложность архитектуры, как оказывать поддержку разработчикам. Они щедро делятся множеством полезных идей и приемов, которые вынесли из своего многолетнего опыта. Авторы надеются, что книга станет источником вдохновения и руководством к действию для многих профессиональных программистов.

Билл де Ора , Майкл Хайгард , Нил Форд

Программирование, программы, базы данных / Базы данных / Программирование / Книги по IT
Программирование. Принципы и практика использования C++ Исправленное издание
Программирование. Принципы и практика использования C++ Исправленное издание

Специальное издание самой читаемой и содержащей наиболее достоверные сведения книги по C++. Книга написана Бьярне Страуструпом — автором языка программирования C++ — и является каноническим изложением возможностей этого языка. Помимо подробного описания собственно языка, на страницах книги вы найдете доказавшие свою эффективность подходы к решению разнообразных задач проектирования и программирования. Многочисленные примеры демонстрируют как хороший стиль программирования на С-совместимом ядре C++, так и современный -ориентированный подход к созданию программных продуктов. Третье издание бестселлера было существенно переработано автором. Результатом этой переработки стала большая доступность книги для новичков. В то же время, текст обогатился сведениями и методиками программирования, которые могут оказаться полезными даже для многоопытных специалистов по C++. Не обойдены вниманием и нововведения языка: стандартная библиотека шаблонов (STL), пространства имен (namespaces), механизм идентификации типов во время выполнения (RTTI), явные приведения типов (cast-операторы) и другие. Настоящее специальное издание отличается от третьего добавлением двух новых приложений (посвященных локализации и безопасной обработке исключений средствами стандартной библиотеки), довольно многочисленными уточнениями в остальном тексте, а также исправлением множества опечаток. Книга адресована программистам, использующим в своей повседневной работе C++. Она также будет полезна преподавателям, студентам и всем, кто хочет ознакомиться с описанием языка «из первых рук».

Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова

Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT