Шрифт:
Опции:
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 то применяется только первая замена.
В Перл существует несколько операторов ввода-вывода. Первый это скобки из символа '`' – акцента. Строка в этих скобках воспринимается как системная команда и результат ее действия возвращается как «псевдо» литерал. В скалярном контексте это строка содержащая весь результат, а в списковом – список элементы которого – строки результата.
Статус выполненой команды хранится в переменной $? .
Следующая команда ввода вывода выглядит как '<файл>'.
Вычисление <файл> приводит к чтению строки из файла. Обратите внимание что 'файл' здесь не имя файла, а указатель файла который создается функцией open. В скалярном контексте читается одна строка вместе с символом '\n' – перевода строки, а в списковом весь файл читается в список элементы которого суть строки файла.
В случае обнаружения конца файла результат оператора не определен и воспринимается как false. Если не указана переменная результата то по умолчанию это $_. Указатель файла по умолчанию STDIN – стандартный ввод.
Пример:
while(<>) { print; }; # Прочитать и вывести весь файл STDIN
У оператора '<>' есть одна отличительная особенность. Если в командной строке нет никаких аргументов то читается стандартный ввод, если есть аргументы то они считаются именами файлов которые последовательно читаются.
Если в угловых скобках записана переменная то содержимое этой переменной считается именем указателя файла или ссылкой на указатель файла. Если такого указателя не существует то содержимое переменной воспринимается как шаблон имен файлов и результат – имена файлов на диске подходящих по шаблону.
Пример:
while(<*.pl>) { print;}; # То же что и ls *.pl
@files = <*>; # Массив @files содержит имена файлов в директории
но лучше сделать: @files = glob("*"); т.к. внутри скобок можно использовать переменные.
Как и С Перл выполняет возможные вычисления в период компиляции.
Так подстановка символов после '\' , операция конкатенации строк, арифметические выражения содержащие только одни константы, все это делается в момент компиляции что существенно увеличивает скорость выполнения программы.
По умолчанию Перл выполняет арифметику с плавающей запятой, но если вы укажете:
use integer;
то компилятор будет использовать целочисленную арифметику до конца текущего блока, хотя вложенный блок может это и отменить в своих пределах с помощью:
no integer;
Встроенные функции
Встроенные функции используются как термы выражений и подразделяются на две категории: списковые операторы и унарные операторы. Это влияет на их приоритет по отношению к оператору ',' – запятая. Списковые операторы могут именть множество (список) аргументов, а унарные только один. Таким образом запятая завершает аргументы унарного оператора и разделяет аргументы спискового.