Perl – высокоуровневый мощный язык с 25-летней историей. Особенно хорош для обработки разнообразных текстовых данных.
Perl работает более чем на 100 платформах, от портативных устройств до мейнфреймов, и подходит как для быстрого прототипирования, так и для крупных проектов.
1# Комментарии начинаются с символа решетки.
2
3
4#### Типы переменных в Perl
5
6# Скалярные переменные начинаются с знака доллара $.
7# Имя переменной состоит из букв, цифр и знаков подчеркивания,
8# начиная с буквы или подчеркивания.
9
10### В Perl три основных типа переменных: скаляры, массивы, хеши.
11
12## Скаляры
13# Скаляр хранит отдельное значение:
14my $animal = "camel";
15my $answer = 42;
16
17# Скаляры могут быть строками, целыми и вещественными числами.
18# Когда требуется, Perl автоматически выполняет преобразования к нужному типу.
19
20## Массивы
21# Массив хранит список значений:
22my @animals = ("camel", "llama", "owl");
23my @numbers = (23, 42, 69);
24my @mixed = ("camel", 42, 1.23);
25
26
27## Хеши
28# Хеш хранит набор пар ключ/значение:
29
30my %fruit_color = ("apple", "red", "banana", "yellow");
31
32# Можно использовать оператор "=>" для большей наглядности:
33
34my %fruit_color = (
35 apple => "red",
36 banana => "yellow",
37 );
38
39# Важно: вставка и поиск в хеше выполняются за константное время,
40# независимо от его размера.
41
42# Скаляры, массивы и хеши подробно описаны в разделе perldata
43# (perldoc perldata).
44
45# Более сложные структуры данных можно получить, если использовать ссылки.
46# С помощью ссылок можно получить массив массивов хешей, в которых хранятся другие хеши.
47
48#### Условные операторы и циклы
49
50# В Perl есть большинсво привычных условных и циклических конструкций.
51
52if ( $var ) {
53 ...
54} elsif ( $var eq 'bar' ) {
55 ...
56} else {
57 ...
58}
59
60unless ( condition ) {
61 ...
62 }
63# Это более читаемый вариант для "if (!condition)"
64
65# Специфические Perl-овые пост-условия:
66print "Yow!" if $zippy;
67print "We have no bananas" unless $bananas;
68
69# while
70 while ( condition ) {
71 ...
72 }
73
74
75# for, foreach
76for ($i = 0; $i <= $max; $i++) {
77 ...
78 }
79
80foreach (@array) {
81 print "This element is $_\n";
82 }
83
84for my $el (@array) {
85 print "This element is $el\n";
86 }
87
88#### Регулярные выражения
89
90# Регулярные выражения занимают важное место в Perl-е,
91# и подробно описаны в разделах документации perlrequick, perlretut и других.
92# Вкратце:
93
94# Сопоставление с образцом
95if (/foo/) { ... } # выполняется, если $_ содержит "foo"
96if ($a =~ /foo/) { ... } # выполняется, если $a содержит "foo"
97
98# Простые замены
99
100$a =~ s/foo/bar/; # заменяет foo на bar в строке $a
101$a =~ s/foo/bar/g; # заменяет ВСЕ ВХОЖДЕНИЯ foo на bar в строке $a
102
103
104#### Файлы и ввод-вывод
105
106# Открыть файл на чтение или запись можно с помощью функции "open()".
107
108open(my $in, "<", "input.txt") or die "Can't open input.txt: $!";
109open(my $out, ">", "output.txt") or die "Can't open output.txt: $!";
110open(my $log, ">>", "my.log") or die "Can't open my.log: $!";
111
112# Читать из файлового дескриптора можно с помощью оператора "<>".
113# В скалярном контексте он читает одну строку из файла, в списковом --
114# читает сразу весь файл, сохраняя по одной строке в элементе массива:
115
116my $line = <$in>;
117my @lines = <$in>;
118
119#### Подпрограммы (функции)
120
121# Объявить функцию просто:
122
123sub logger {
124 my $logmessage = shift;
125 open my $logfile, ">>", "my.log" or die "Could not open my.log: $!";
126 print $logfile $logmessage;
127}
128
129# Теперь можно использовать эту функцию так же, как и встроенные:
130
131logger("We have a logger subroutine!");
Perl-модули ¶
Perl-овые модули предоставляют широкий набор функциональности, так что вы можете не изобретать заново велосипеды, а просто скачать нужный модуль с CPAN. Некоторое количество самых полезных модулей включено в стандартную поставку Perl.
Раздел документации perlfaq содержит вопросы и ответы о многих частых задачах, и часто предлагает подходящие CPAN-модули.
Unicode ¶
Вам наверняка понадобится работать с не-ASCII текстами. Добавьте эти прагмы в начало скрипта:
1use utf8;
2use open ':std' => ':utf8';
Подробнее читайте в perldoc, разделы perlunicode и open.
strict, warnings ¶
Прагмы strict и warnings включают полезные проверки во время компиляции:
1use strict;
2use warnings;
Подробнее смотрите perldoc strict и perldoc warnings.
Смотрите также ¶
- perl-tutorial
- обучающий раздел на www.perl.com
- perldoc в вебе
- встроенная справка :
perldoc perlintro