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

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

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

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'.

Операторы и приоритеты

В Перл ассоциативность и приоритетность операторов аналогична языку 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 и полученной значение используется. Если после переменной то ее величина изменяется после применения.

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

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

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

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных