Логические операторы && (AND) и || (OR).
'&&' | - если левое выражение возвращает false, правое не выполняется. |
'||' | - если левое выражение возвращает true, правое не выполняется. |
Отличие от подобных операторов в С заключается в том, что в С возвращаемое значение либо 0, либо 1, тогда как в Perl возвращается результат выражения.
Оператор диапазона '..' Результат его работы зависит от контекста. В списковом контексте результат есть список с элементами, первый элемент которого это левое выражение и последнее - правое. Значение каждого элемента внутри списка увеличивается на 1. Данный оператор удобен для небольших циклов, т.к. память отводится для всего списка целиком. Поэтому будьте внимательны и не задавайте слишком большой диапазон.
for $i (1..4)
{ print "$i "; # Результат: 1 2 3 4
}
В скалярном контексте результат - логическое значение. Каждая '..' операция устанавливает свое собственное состояние. Это false до тех пор, пока левый операнд false. Как только он стал true, результат - true до тех пока правый true, после чего опять - false. Если вы не хотите проверять правый операнд, то используйте оператор '...'.
Правый операнд не вычисляется, пока результат false и левый операнд не вычисляется, пока результат true. Приоритетность оператора '..' немного ниже чем '&&' и '||'. Возвращаемое значение если flase - нулевая строка, если true - порядковый номер, начиная с 1. Порядковый номер обнуляется для каждого нового диапазона.
@abc = ('a'..'z'); # Массив малых букв латинского алфавита
@digits = (0..9); # Массив цифр
Условный оператор '?:' Этот оператор работает так же как и в С. Если выражение перед '?' истинно, то выполняется аргумент перед ':' - иначе после ':'.
$i = 1;
$i > 1 ? print "больше" : print "меньше"; #Результат: меньше
Операторы присваивания. '=' - обычный оператор "присвоить" правое значение переменной слева. Вся эта группа операторов подобна операторам С, т.е.
$i += 2; #эквивалентно $i = $i + 2;
Остальные операторы этой группы работают аналогично. Допустимы следующие операторы:
**=, +=, -=, .=, *=, /=, %=, x=, &=, |=, ^=, <<=, >>=, &&=, ||=
Приоритет всей этой группы операторов равен приоритету '='.
Оператор ',' (запятая) В скалярном контексте выполняется левый аргумент, результат игнорируется, затем правый, и его результат есть результат действия оператора. В списковом контексте это разделитель элементов списка, включает указанные элементы в список.
Операторы not, and, or, xor Оператор логическое not (отрицание). - унарный not возвращает противоположное значение, полученное выражением справа. Он эквивалентен '!'.
Оператор логическое and (И). Выполняет логическую конъюнкцию двух выражений. Эквивалентен '&&', но имеет очень низкий приоритет и "краткость" действия, т. е. если левое выражение равно false - правое не выполняется.
Логическое or (ИЛИ). Выполняет логическую дизъюнкцию двух выражений. Эквивалентен '||', но имеет очень низкий приоритет и "краткость" действия, т. е. если левое выражение равно true - левое не выполняется.
Логическое xor (исключающее ИЛИ). Выполняет логическое исключающие или. Всегда выполняются оба правое и левое выражение.
В Perl отсутствуют операторы языка С, такие как:
унарное & | - получить адрес. Для этого применяется '\'. |
унарный * | - переадресация. |
(TYPE) | - совмещение типов. |
Операторы ограничители строк. Обычно ограничителями строк мы считаем литералы, но в Perl это операторы, выполняющие разного рода интерполяцию и поиск по шаблону. Вы можете сами задавать удобные для вас ограничители. В следующей таблице приведен полный перечень вариантов. Фигурные скобки '{}' обозначают любой символ, используемый для ограничителя. В случае использования скобок (круглых '( )', квадратных '[ ]', фигурных '{ }', угловых '< >') в начале ставится открывающаяся скобка, а в конце закрывающая.
По умолчанию | Полное | Функция | Интерполяция |
'' | q{} | Literal | нет |
"" | qq{} | Литерал | да |
`` | qx{} | Команда | да |
qw{} | Список слов | нет | |
// | m{} | Шаблон | да |
s{}{} | Подстановка | да | |
tr{}{} | Трансляция | нет |
В строках, допускающих интерполяцию, имена переменных, начинающиеся с символов '$' или '@' - интерполируются, т.е. в строку вставляется значение строки или массива. Данные последовательности символов имеют специальное значение:
\t | символ табуляции |
\n | символ новой строки |
\r | возврат |
\f | перевод формата |
\v | вертикальная табуляция |
\b | backspace (забой) |
\a | звонок |
\e | escape |
\034 | восьмеричный символ |
\x1a | шестнадцатеричный символ |
\c[ | символ управления |
\l | нижний регистр следующего символа |
\u | верхний регистр следующего символа |
\L | нижний регистр для всех символов до \E |
\U | верхний регистр для всех символов до \E |
\E | ограничитель смены регистра |
\Q | отмена действия метасимволов до \E |
Шаблоны интерполируются как регулярные выражения. Это выполняется вторым проходом после интерполяции переменных, поэтому в шаблоны можно вставлять переменные. Для отмены интерполяции используйте '\Q'. Если вы применяете вложенные ограничители, то внутренние ограничители работать не будут.
?PATERN? Действие этого оператора аналогично /шаблон/, но выполняется до первого совпадения. Это удобно для поиска наличия какой-нибудь строки в одном или множестве файлов. Это не очень удачный оператор.
m/PATERN/gimosx, /PATERN/gimosx Поиск в строке по патерну (шаблону). В скалярном контексте возвращает логическое значение true (1) или false (''). Если строка не указана с помощью операторов '=~' или '!~', поиск ведется в строке $_. Опции:
g | - Глобальный поиск. Поиск всех вхождений. |
i | - Сравнение не зависит от регистра (верхний или нижний) |
m | - Строка многострочная. |
o | - однопроходная компиляция |
s | - однострочная строка |
x | - используются расширенные регулярные выражения. |
Если '/' - ограничитель, то начальное 'm' можно опустить. С помощью него в качестве ограничителя может быть любой символ кроме пробела.
PATTERN может содержать переменные, которые будут интерполироваться (перекомпилироваться) каждый раз в момент вычисления. Переменные $) и $| не интерполируются. Если вы хотите, что бы такой шаблон интерполировался один раз - добавьте /o. Это необходимо делать в циклах поиска для увеличения быстродействия. Если PATERN - нулевая строка, то используется последнее регулярное выражение.
В скалярном контексте возвращается список, элементы которого - результаты выполнения выражений в скобках патерна ($1, $2, $3...). Обратите внимание, что первый элемент $1.
$a = "/usr/local/perl/perl.bin"; # Анализируемая строка
Цель: Создать массив @dirs с именами директорий.
Решение: Самый простой способ - воспользоваться split('\/'), но мы используем скобки.
@dirs =($a=~ m[/(\w*)/(\w*)/(\w*)/(\w*)]);
Здесь 'm[' - использовать квадратные скобки как ограничители, (\w*)- шаблон алфавитно-цифровой последовательности.
В результате @dirs равен ('usr', 'local', 'perl')
q/строка/, 'строка' Строка литералов. Не интерполируется. Внутри строки разрешается использовать \' или \\ для обозначения символов ' и \ :
print q#Привет.#; # Результат Привет.
print 'O\'K'; # O'K
qq/строка/, "строка" Интерполируемая строка:
$var = 13;
print "\$var = $var"; # Результат: $var = 13
qx/строка/, `строка` Строка интерполируется, а потом выполняется как системная команда:
print `date`; #Результат: Thu Nov 14 13:36:49 MSK 1996
qw/строка/ Возвращает список, элементы которого - слова строки, разделенные пробелами:
print qw/Построимся и спасемся!/; # ('Построимся','и','спасемся!')
s/шаблон/подстрока/egimosx Поиск по шаблону и в случае успеха замена подстрокой. Возвращает количество произведенных подстановок, иначе false (0). Если строка в которой ведется поиск не указана (операторы =~ или != ), то используется переменная $_ . Если в качестве разделителя '/' использовать одинарную кавычку ('), то интерполяции не будет, иначе можно применять переменные в шаблоне или подстроке. Опции:
e | - Рассматривать правую часть как выражение. |
g | - Глобальный поиск. |
i | - Без различия регистра букв |
m | - многострочная переменная |
o | - компилировать шаблон один раз |
s | - однострочная переменная |
x | - расширенное регулярное выражение |
Разделитель '/' можно заменить на любой алфавитно-цифровой символ кроме пробела:
Дата добавления: 2015-11-04; просмотров: 1047;