--- 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`