summaryrefslogtreecommitdiffhomepage
path: root/ru-ru/perl-ru.html.markdown
blob: 417cd8013df3ef5caf9ae0092796b610d8862369 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
---
category: language
language: perl
filename: learnperl-ru.pl
contributors:
    - ["Korjavin Ivan", "http://github.com/korjavin"]
translators:
    - ["Elena Bolshakova", "http://github.com/liruoko"]
lang: ru-ru
---

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`