Получить исходный код: learnperl.pl
Perl -- высокоуровневый мощный язык с 25-летней историей. Особенно хорош для обработки разнообразных текстовых данных.
Perl работает более чем на 100 платформах, от портативных устройств до мейнфреймов, и подходит как для быстрого прототипирования, так и для крупных проектов.
# Комментарии начинаются с символа решетки.
#### Типы переменных в Perl
# Скалярные переменные начинаются с знака доллара $.
# Имя переменной состоит из букв, цифр и знаков подчеркивания,
# начиная с буквы или подчеркивания.
### В Perl три основных типа переменных: скаляры, массивы, хеши.
## Скаляры
# Скаляр хранит отдельное значение:
my $animal = "camel";
my $answer = 42;
# Скаляры могут быть строками, целыми и вещественными числами.
# Когда требуется, Perl автоматически выполняет преобразования к нужному типу.
## Массивы
# Массив хранит список значений:
my @animals = ("camel", "llama", "owl");
my @numbers = (23, 42, 69);
my @mixed = ("camel", 42, 1.23);
## Хеши
# Хеш хранит набор пар ключ/значение:
my %fruit_color = ("apple", "red", "banana", "yellow");
# Можно использовать оператор "=>" для большей наглядности:
my %fruit_color = (
apple => "red",
banana => "yellow",
);
# Важно: вставка и поиск в хеше выполняются за константное время,
# независимо от его размера.
# Скаляры, массивы и хеши подробно описаны в разделе perldata
# (perldoc perldata).
# Более сложные структуры данных можно получить, если использовать ссылки.
# С помощью ссылок можно получить массив массивов хешей, в которых хранятся другие хеши.
#### Условные операторы и циклы
# В Perl есть большинсво привычных условных и циклических конструкций.
if ( $var ) {
...
} elsif ( $var eq 'bar' ) {
...
} else {
...
}
unless ( condition ) {
...
}
# Это более читаемый вариант для "if (!condition)"
# Специфические Perl-овые пост-условия:
print "Yow!" if $zippy;
print "We have no bananas" unless $bananas;
# while
while ( condition ) {
...
}
# for, foreach
for ($i = 0; $i <= $max; $i++) {
...
}
foreach (@array) {
print "This element is $_\n";
}
for my $el (@array) {
print "This element is $el\n";
}
#### Регулярные выражения
# Регулярные выражения занимают важное место в Perl-е,
# и подробно описаны в разделах документации perlrequick, perlretut и других.
# Вкратце:
# Сопоставление с образцом
if (/foo/) { ... } # выполняется, если $_ содержит "foo"
if ($a =~ /foo/) { ... } # выполняется, если $a содержит "foo"
# Простые замены
$a =~ s/foo/bar/; # заменяет foo на bar в строке $a
$a =~ s/foo/bar/g; # заменяет ВСЕ ВХОЖДЕНИЯ foo на bar в строке $a
#### Файлы и ввод-вывод
# Открыть файл на чтение или запись можно с помощью функции "open()".
open(my $in, "<", "input.txt") or die "Can't open input.txt: $!";
open(my $out, ">", "output.txt") or die "Can't open output.txt: $!";
open(my $log, ">>", "my.log") or die "Can't open my.log: $!";
# Читать из файлового дескриптора можно с помощью оператора "<>".
# В скалярном контексте он читает одну строку из файла, в списковом --
# читает сразу весь файл, сохраняя по одной строке в элементе массива:
my $line = <$in>;
my @lines = <$in>;
#### Подпрограммы (функции)
# Объявить функцию просто:
sub logger {
my $logmessage = shift;
open my $logfile, ">>", "my.log" or die "Could not open my.log: $!";
print $logfile $logmessage;
}
# Теперь можно использовать эту функцию так же, как и встроенные:
logger("We have a logger subroutine!");
Perl-овые модули предоставляют широкий набор функциональности, так что вы можете не изобретать заново велосипеды, а просто скачать нужный модуль с CPAN. Некоторое количество самых полезных модулей включено в стандартную поставку Perl.
Раздел документации perlfaq содержит вопросы и ответы о многих частых задачах, и часто предлагает подходящие CPAN-модули.
Вам наверняка понадобится работать с не-ASCII текстами. Добавьте эти прагмы в начало скрипта:
use utf8;
use open ':std' => ':utf8';
Подробнее читайте в perldoc, разделы perlunicode и open.
Прагмы strict и warnings включают полезные проверки во время компиляции:
use strict;
use warnings;
Подробнее смотрите perldoc strict и perldoc warnings.
perldoc perlintro
Хотите предложить свой перевод? Может быть, улучшение перевода? Откройте Issue в репозитории GitHub или сделайте pull request сами!
Первоначально предоставлено автором Korjavin Ivan, и обновлено 3 авторами.