Введение в Perl - Маслов Владимир Викторович
По умолчанию Полное Функция Интерполяция
– – – –
'' q{} Literal нет
"" qq{} Литерал да
`` qx{} Команда да
qw{} Список слов нет
// m{} Шаблон да
s{}{} Подстановка да
tr{}{} Трансляция нет
В строках допускающих интерполяцию имена переменных начинающиеся с символов '$' или '@' – интерполируются т.е. в строку вставляется значение строки или массива.
Данные последовательности символов имеют специальное значение:
t символ табуляции
n символ новой строки
r возврат
f перевод формата
v вертикальная табуляция
b backspace (забой)
a звонок
e escape
34 восьмеричный символ
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 =~ m[/(w*)/(w*)/(w*)/(w*)]
Здесь 'm[' – использовать квадратные скобки как ограничители.
(w*) – шаблон алфавитноцифровой последовательности.
В результате @dirs равен ('usr', 'local', 'perl')
Строка литералов. Не интерполируется. Внутри строки разрешается использовать ' или \ для обозначения символов ' и .
Пример:
print q#Привет.#; # Результат Привет.
print 'O'K'; # O'K
Интерполируемая строка.
Пример:
$var = 13;
print «$var = $var»;
Результат:
$var = 13
Сначала строка интерполируется а потом выполняется как системная команда.
Пример:
print `date`;
Результат:
Thu Nov 14 13:36:49 MSK 1996
Возвращает список элементы которого – слова строки разделенные пробелами.
Пример:
print qw/Построемся и спасемся!/; # ('Построемся','и','спасемся!')
Результат:
Построемсяиспасемся!
Часто применяется как:
use POSIX qw( setlocale localeconv )
@EXPORT = qw( proc1 var );
Поиск по шаблону и в случае успеха замена подстрокой.
Возвращает количество произведенных подстановок иначе false (0). Если строка в которой ведестя поиск не указана (операторы =~ или != ) то используется переменная $_ .
Если в качестве раделителя '/' исрользовать одинарную кавычку (') то интерполяции не будет иначе можно применять переменные в шаблоне или подстроке.
Опции:
e – Расмматривать правую часть как выражение.
g – Глобальный поиск.
i – Без различия регистра букв
m – многосточная переменная
o – компилировать шаблон один раз
s – однострочная переменная
x – расширенное регулярное выражение
Разделитель '/' можно заменить на любой алфавитно-цифровой символ кроме пробела.
Пример:
$var = «12345»; # исходная строка
$var =~ s/1/0/; # Заменить '1' на '0'. Результат 02345
$var =~ s(5)(.); # Заменить '5' на '.' Результат 0234.
Здесь в качестве разделителя применены скобки поэтому подстрока
взята в две скобки.
$var =~ s/d*/каламбур/; Заменить все цифры. Результат 'каламбур.'
$var =~ s/а/о/g; # Заменить все 'а' на 'о'. Результат 'коломбур.'
$var = «12 34»; # Новое значение
$var =~ s/(dd) (dd)/$2 $1/; # Поменять местами числа. Результат '34 12'.
tr/таблица1/таблица2/cds
y/таблица1/таблица2/cds
Замена всех символов из «таблица1» на соответсвующий символ из «таблица2». Результат – количество замен или стираний. Без оператора =~ или != операция выполняется с строкой $_. Для совместимости с программой sed вместо tr можно писать 'y'.
Опции:
c – дополнение «таблица1»
d – стереть найденные но не замененные символы.
s – «зжать» повторяющиеся замененные символы.
Если указана опция /dтаблица2 всегда интерпретируется как положено.
Другими словами если таблица2 короче чем таблица1 то символ из таблицы1 интерпретируется всегда. Если таблица2 – null то все символы строки остаются не изменненные. Это удобно для подсчета количества сиволов в строке определенного класса или для сжатия повторяющихся символов например пробелов.
Пример:
$s = «hello»; # Исходная строка
$s =~ tr/a-z/A-Z/; # Заменить малые буквы на большие. Результат
# 'HELLO'
$s = 'Hel....lo';
$s =~ tr/a-zA-z/_/c; # Заменить все не буквы на '_'
Похожие книги на "Введение в Perl", Маслов Владимир Викторович
Маслов Владимир Викторович читать все книги автора по порядку
Маслов Владимир Викторович - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки mir-knigi.info.