learnxinyminutes-docs/ru/perl.md
2024-12-08 23:21:12 -07:00

193 lines
6.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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";
}
#### Регулярные выражения
# Регулярные выражения занимают важное место в 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-модули
Perl-овые модули предоставляют широкий набор функциональности,
так что вы можете не изобретать заново велосипеды, а просто скачать
нужный модуль с [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`