Лістинг 5.4. Регулярні вирази.
$s = "hello"; # Вихідний рядок
$s =~ tr/a-z/A-Z/; # Замінити малі букви на великі.
print $s; # Результат 'HELLO'
$s = 'Hel....lo';
$s =~ tr/a-zA-z/_/c; # Замінити не всі букви на '_'
print $s; # Результат 'Hel____lo'
$s =~ tr/_/ /s; # Замінити '_' ' ' і стискувати.
print $s; # Результат 'Hel lo'
$s =~ tr/a-zA-Z /a-zA-Z/d; # Видалити не всі букви.
print $s; # Результат '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;
Вбудовані функції.
Вбудовані функції використовуються як терми виразів і підрозділяються на дві категорії: спискові оператори і унарні оператори. Це впливає на їх пріоритет по відношенню до оператора '', - кома. Спискові оператори можуть мати безліч (список) аргументів, а унарні лише один. Таким чином, кома завершує аргументи унарного оператора і розділяє аргументи спискового. Аргумент унарного оператора сприймається зазвичай в скалярному контексті, а спискового - як в скалярному, так і списковому, причому скалярні аргументи йдуть першими. Аргументи функцій можна брати в круглих дужок і таким чином означати, що "це функція" і пріоритет не має значення, інакше це списковий або унарний оператор з певним фіксованим пріоритетом. Пропуск після імені функції і дужкою значення не має:
print 1 + 2 + 3; # результат 6
print(1+2)+3; # результат 3
print (1+2)+3; # знову 3
print (1+2+3); # 6
Якщо функція повертає результат, як в скалярному, так і в списковому контексті, то код виходу помилково - скаляр з невизначеним значенням або порожній список.
Дата добавления: 2016-04-02; просмотров: 576;