perl.md

Личный сайт Go-разработчика из Казани

Perl – высокоуровневый мощный язык с 25-летней историей. Особенно хорош для обработки разнообразных текстовых данных.

Perl работает более чем на 100 платформах, от портативных устройств до мейнфреймов, и подходит как для быстрого прототипирования, так и для крупных проектов.

1# Комментарии начинаются с символа решетки. 2 3 4#### Типы переменных в Perl 5 6# Скалярные переменные начинаются с знака доллара $. 7# Имя переменной состоит из букв, цифр и знаков подчеркивания, 8# начиная с буквы или подчеркивания. 9 10### В Perl три основных типа переменных: скаляры, массивы, хеши. 11 12## Скаляры 13# Скаляр хранит отдельное значение: 14my $animal = "camel"; 15my $answer = 42; 16 17# Скаляры могут быть строками, целыми и вещественными числами. 18# Когда требуется, Perl автоматически выполняет преобразования к нужному типу. 19 20## Массивы 21# Массив хранит список значений: 22my @animals = ("camel", "llama", "owl"); 23my @numbers = (23, 42, 69); 24my @mixed = ("camel", 42, 1.23); 25 26 27## Хеши 28# Хеш хранит набор пар ключ/значение: 29 30my %fruit_color = ("apple", "red", "banana", "yellow"); 31 32# Можно использовать оператор "=>" для большей наглядности: 33 34my %fruit_color = ( 35 apple => "red", 36 banana => "yellow", 37 ); 38 39# Важно: вставка и поиск в хеше выполняются за константное время, 40# независимо от его размера. 41 42# Скаляры, массивы и хеши подробно описаны в разделе perldata 43# (perldoc perldata). 44 45# Более сложные структуры данных можно получить, если использовать ссылки. 46# С помощью ссылок можно получить массив массивов хешей, в которых хранятся другие хеши. 47 48#### Условные операторы и циклы 49 50# В Perl есть большинсво привычных условных и циклических конструкций. 51 52if ( $var ) { 53 ... 54} elsif ( $var eq 'bar' ) { 55 ... 56} else { 57 ... 58} 59 60unless ( condition ) { 61 ... 62 } 63# Это более читаемый вариант для "if (!condition)" 64 65# Специфические Perl-овые пост-условия: 66print "Yow!" if $zippy; 67print "We have no bananas" unless $bananas; 68 69# while 70 while ( condition ) { 71 ... 72 } 73 74 75# for, foreach 76for ($i = 0; $i <= $max; $i++) { 77 ... 78 } 79 80foreach (@array) { 81 print "This element is $_\n"; 82 } 83 84for my $el (@array) { 85 print "This element is $el\n"; 86 } 87 88#### Регулярные выражения 89 90# Регулярные выражения занимают важное место в Perl-е, 91# и подробно описаны в разделах документации perlrequick, perlretut и других. 92# Вкратце: 93 94# Сопоставление с образцом 95if (/foo/) { ... } # выполняется, если $_ содержит "foo" 96if ($a =~ /foo/) { ... } # выполняется, если $a содержит "foo" 97 98# Простые замены 99 100$a =~ s/foo/bar/; # заменяет foo на bar в строке $a 101$a =~ s/foo/bar/g; # заменяет ВСЕ ВХОЖДЕНИЯ foo на bar в строке $a 102 103 104#### Файлы и ввод-вывод 105 106# Открыть файл на чтение или запись можно с помощью функции "open()". 107 108open(my $in, "<", "input.txt") or die "Can't open input.txt: $!"; 109open(my $out, ">", "output.txt") or die "Can't open output.txt: $!"; 110open(my $log, ">>", "my.log") or die "Can't open my.log: $!"; 111 112# Читать из файлового дескриптора можно с помощью оператора "<>". 113# В скалярном контексте он читает одну строку из файла, в списковом -- 114# читает сразу весь файл, сохраняя по одной строке в элементе массива: 115 116my $line = <$in>; 117my @lines = <$in>; 118 119#### Подпрограммы (функции) 120 121# Объявить функцию просто: 122 123sub logger { 124 my $logmessage = shift; 125 open my $logfile, ">>", "my.log" or die "Could not open my.log: $!"; 126 print $logfile $logmessage; 127} 128 129# Теперь можно использовать эту функцию так же, как и встроенные: 130 131logger("We have a logger subroutine!");

Perl-модули

Perl-овые модули предоставляют широкий набор функциональности, так что вы можете не изобретать заново велосипеды, а просто скачать нужный модуль с CPAN. Некоторое количество самых полезных модулей включено в стандартную поставку Perl.

Раздел документации perlfaq содержит вопросы и ответы о многих частых задачах, и часто предлагает подходящие CPAN-модули.

Unicode

Вам наверняка понадобится работать с не-ASCII текстами. Добавьте эти прагмы в начало скрипта:

1use utf8; 2use open ':std' => ':utf8';

Подробнее читайте в perldoc, разделы perlunicode и open.

strict, warnings

Прагмы strict и warnings включают полезные проверки во время компиляции:

1use strict; 2use warnings;

Подробнее смотрите perldoc strict и perldoc warnings.

Смотрите также