learnxinyminutes-docs/ru/perl.md

193 lines
6.8 KiB
Markdown
Raw Permalink Normal View History

---
filename: learnperl-ru.pl
contributors:
- ["Korjavin Ivan", "http://github.com/korjavin"]
translators:
- ["Elena Bolshakova", "http://github.com/liruoko"]
---
Perl -- высокоуровневый мощный язык с 25-летней историей.
Особенно хорош для обработки разнообразных текстовых данных.
Perl работает более чем на 100 платформах, от портативных устройств
до мейнфреймов, и подходит как для быстрого прототипирования,
так и для крупных проектов.
```perl
# Комментарии начинаются с символа решетки.
#### Типы переменных в 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";
}
#### Регулярные выражения
2015-06-10 08:00:00 +00:00
# Регулярные выражения занимают важное место в 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: $!";
2024-06-03 19:31:20 +00:00
# Читать из файлового дескриптора можно с помощью оператора "<>".
# В скалярном контексте он читает одну строку из файла, в списковом --
# читает сразу весь файл, сохраняя по одной строке в элементе массива:
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-модули
Perl-овые модули предоставляют широкий набор функциональности,
так что вы можете не изобретать заново велосипеды, а просто скачать
2024-06-03 19:31:20 +00:00
нужный модуль с [CPAN](http://www.cpan.org/).
Некоторое количество самых полезных модулей включено в стандартную
поставку Perl.
Раздел документации perlfaq содержит вопросы и ответы о многих частых
задачах, и часто предлагает подходящие CPAN-модули.
#### Unicode
Вам наверняка понадобится работать с не-ASCII текстами.
Добавьте эти прагмы в начало скрипта:
```perl
use utf8;
use open ':std' => ':utf8';
```
Подробнее читайте в perldoc, разделы perlunicode и open.
#### strict, warnings
Прагмы strict и warnings включают полезные проверки во время компиляции:
```perl
use strict;
use warnings;
```
Подробнее смотрите perldoc strict и perldoc warnings.
#### Смотрите также
- [perl-tutorial](http://perl-tutorial.org/)
- [обучающий раздел на www.perl.com](http://www.perl.org/learn.html)
- [perldoc в вебе](http://perldoc.perl.org/)
- встроенная справка : `perldoc perlintro`