-
шаблон алфавитно-цифровой
последовательности.
В результате @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/Построимся и
спасемся!/; # ('Построимся','и','спасемся!')
Результат:
Построимсяиспасемся!
Часто
применяется как:
use
POSIX qw( setlocale localeconv )
@EXPORT =
qw( proc1 var );
s/шаблон/подстрока/egimosx
Поиск по
шаблону и в случае успеха
замена подстрокой.
Возвращает количество
произведенных подстановок,
иначе 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/(\d\d)
(\d\d)/$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;
# Заменить все не буквы
на '_'
#
Результат 'Hel____lo'
$s =~ tr/_/
/s;
# Заменить '_' на ' ' и сжать.
#
Результат 'Hel lo'
$s =~ tr/a-zA-Z
/a-zA-Z/d; # Удалить все не буквы.
Результат 'Hello'
Если один и
тот же символ несколько раз
указан в таблице1, то
применяется только первая
замена.
Операторы
ввода-вывода.
В Perl
существует несколько
операторов ввода-вывода.
Первый это скобки из символа
'`' - акцента. Строка в этих
скобках воспринимается как
системная команда и
результат ее действия
возвращается как "псевдо"
литерал. В скалярном
контексте это строка
содержащая весь результат, а
в списковом - список,
элементы которого - строки
результата. Статус
выполненной команды
хранится в переменной $? .
Следующая
команда ввода вывода
выглядит как '<файл>'.
Вычисление <файл>
приводит к чтению строки из
файла. Обратите внимание,
что 'файл' здесь не имя файла,
а указатель файла, который
создается функцией open(). В
скалярном контексте
читается одна строка вместе
с символом '\n' - перевода
строки, а в списковом весь
файл читается в список,
элементы которого суть
строки файла. В случае
обнаружения конца файла
результат оператора не
определен и воспринимается
как false. Если не указана
переменная результата, то по
умолчанию это $_. Указатель
файла по умолчанию STDIN -
стандартный ввод.
Пример:
while(<>) { print; }; #
Прочитать и вывести весь
файл STDIN
У
оператора '<>' есть одна
отличительная особенность.
Если в командной строке нет
никаких аргументов, то
читается стандартный ввод,
если есть аргументы, то они
считаются именами файлов,
которые последовательно
читаются.
Если в
угловых скобках записана
переменная, то содержимое
этой переменной считается
именем указателя файла или
ссылкой на указатель файла.
Если такого указателя не
существует, то содержимое
переменной воспринимается
как шаблон имен файлов и
результат - имена файлов на
диске, подходящих по шаблону.
Пример:
while(<*.pl>) { print;}; # То же
что и ls *.pl
@files =
<*>;
# Массив @files содержит
имена файлов в директории
но лучше
сделать: @files = glob("*"); т.к.
внутри скобок можно
использовать переменные.
Слияние
констант.
Как и С Perl
выполняет возможные
вычисления в период
компиляции. Так подстановка
символов после '\' , операция
конкатенации строк,
арифметические выражения,
содержащие только одни
константы, все это делается
в момент компиляции, что
существенно увеличивает
скорость выполнения
программы.
Целочисленная
арифметика.
По
умолчанию Perl выполняет
арифметику с плавающей
запятой, но если вы укажете:
use integer;
то
компилятор будет
использовать целочисленную
арифметику до конца
текущего блока, хотя
вложенный блок может это и
отменить в своих пределах с
помощью:
no integer;
|