See also ebooksgratis.com: no banners, no cookies, totally FREE.

CLASSICISTRANIERI HOME PAGE - YOUTUBE CHANNEL
Privacy Policy Cookie Policy Terms and Conditions
Perl — Википедия

Perl

Материал из Википедии — свободной энциклопедии

Perl
Изображение:perl_logo.png
Семантика: мультипарадигменный: императивный, объектно-ориентированный, функциональный
Класс языка: {{{paradigm}}}
Тип исполнения: интерпретатор
Появился в: 1987 г.
Автор(ы): Ларри Уолл
Последняя версия: {{{latest_release_version}}}
Тестовая версия: {{{latest_test_version}}}
Типизация данных: динамическая
Основные реализации:
Диалекты:
Создан под влиянием: Си, AWK, Shell, Sed, Лисп
Оказал влияние на: Руби, Python, PHP

Perl (/pɜːɹl/, «пёрл»; в русском языке устоялось «перл») — язык программирования. Создатель Ларри Уолл. Само слово Perlаббревиатура, которая расшифровывается как Practical Extraction and Report Language (практический язык для извлечения данных и составления отчетов; сначала язык назывался PEARL, но затем буква «A» «потерялась»). Существует также ряд других вариантов. Согласно самому красивому из них, название perl произошло от слова pearl (жемчужина). Талисманом языка Perl является верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.

Основной особенностью языка считаются его богатые возможности для работы с текстом, в том числе реализованные при помощи регулярных выражений.

Perl также знаменит огромной коллекцией дополнительных модулей CPAN, находящейся по адресу http://www.cpan.org(англ.)

Интересен текст на Perl, печатающий простые числа:

perl -wle "(1 x $_) !~ /^(11+)\1+$/ && print while ++ $_"

Еще один также впечатляющий своей краткостью пример, имеющий к тому же практическую пользу. Печатаются только уникальные строки файла file.

perl -ne '$s{$_}++ || print' file

В этих примерах Perl напоминает своей краткостью и непонятностью с первого взгляда язык J.

Перл унаследовал много свойств от языков Си, shell script, awk.

Сегодня основной для разработчиков является пятая версия языка Perl однако (на некоторых веб-серверах) продолжают использоваться программы (скрипты), написанные на предыдущей — четвёртой — версии (из-за частичной обратной несовместимости). Фактически стандарт языка определяется реализацией интерпретатора.

С 2000 года идет разработка новой (6-ой) версии языка. В отличие от предыдущих версий, разработчики планируют создать четко определенный стандарт языка. В настоящее время существуют экспериментальные компиляторы Perl 6, но продолжается дальнейшая дискуссия о новых правилах. На русском языке информация о новой версии языка доступна на сайте http://perl6.ru/.

Perl — далеко не единственный язык, дающий богатые возможности в обработке текста. Языки программирования Icon и Snobol предоставляют возможность использовать более полно метод программирования «сопоставления с образцом», частным случаем которого и являются регулярные выражения.

Существует также полноценный shell, использующий в качестве основы язык Perl. Называется он psh и даёт возможность смешивать команды обычного шелла и самого Perl’а.

Содержание

[править] Синтаксис языка Perl

Синтаксис Perl имеет много общего с синтаксисом языков Си, Awk, sed и shell.

Первая строка исходного кода может начинаться с "#!/Путь/к/Perl [-ключи]" - что указывает системе путь к интерпретатору Perl для выполнения программы в UNIX системах и выполнения их на Веб Сервере.

[править] Пример программы

Простейшая программа Hello world выглядит следующим образом:

#!/usr/bin/perl
print "Hello, world!\n";

либо (для веб):

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print "Hello, world!";

Простой способ умножения на число 10 (с использованием конкатенации строк).

$x = 5;
$x .= 0;
print $x;

А вот так можно напечатать число Гугол.

print 1, 0 x 100;

[править] Типы данных

Основные типы данных: скаляр, массив, хеш-таблица, функция, файловый дескриптор и константа. Переменные разных типов отличаются знаком, который стоит перед именем переменной.

$foo; # скаляр или указатель
@foo; # массив
%foo; # хеш-таблица
&foo; # функция
FOO; # дескриптор ввода-вывода или константа
  • Скалярные переменные используются для хранения одиночных значений. Они могут содержать числа, строки и ссылки на другие объекты. Перед именем скалярной переменной необходимо ставить знак доллара '$'. Тип скалярной переменной не фиксирован (в отличие от, например, языка Си) и определяется динамически в зависимости от контекста. Например,
$x = 10; # число
$y = $x + 1; # используем $x как число…
$z = $x . 'string'; # … а теперь — как строку
$ref = \$x;  # $ref является указателем на $x
$$ref=0; # $x содержит значение 0
  • Массив является упорядоченным списком скаляров. Каждый элемент массива имеет порядковый индекс, с помощью которого к нему можно получить доступ. Нумерация элементов начинается с нуля, то есть первый элемент списка имеет индекс 0. Перед именем переменной-массива необходимо ставить знак '@', а для доступа к определенному элементу массива рекомендуется ставить знак '$', так как определенный элемент массива является скаляром . Многомерные массивы можно смоделировать, помещая в список ссылки на другие списки.
@array = (1,2,3,4); # записали в массив @array четыре элемента
print $array[2]; # напечатать третий элемент
print @array[2]; # также напечатать третий элемент, но рекомендуется использовать предыдущую версию
  • Хеш-таблица представляет собой ассоциативный массив, позволяющий ассоциировать строку (называемую ключ) со скаляром (значение). Строка называется ключом, а скаляр в хеш-таблице значением. Перед именем переменной-списка необходимо ставить знак процента '%', а для доступа к определенному элементу массива рекомендуется ставить знак '$'.

Физически Хеш-таблица представляет собой массив, где в нечетных позициях находятся ключи, а на четных - значения.

%hash = (
            'cat' => 'kitten',
            'dog' => 'puppy',
            'cow' => 'calf'
        );
print $hash{'cat'}; #Напечатает kitten
print %hash{'cat'}; #Также напечатает kitten, но рекомендуется использовать предыдущую версию
print join("-", keys %hash) ; # Вывод всех ключей. Напечатает cat-dog-cow 
print join("-", values %hash) ; # Вывод всех значений. Напечатает kitten-puppy-calf
print join("-", %hash) ; #Напечатает cat-kitten-cow-calf-dog-puppy
  • Функция представляет собой фрагмент исполняемого кода. Функция всегда возвращает какое-либо значение либо UNDEF. Если возвращаемое значение явно не указано оператором return, возвращается последнее вычисленное значение.
sub printTwo
{
 print 2;
}
 
sub three
{
 3;
}
 
$s=\&three;
print &$s; #Напечатает 3
 
$s=\&printTwo;
print &$s; #Напечатает 21. `2` в коде функции, а `1` как значение, возвращаемое функцией printTwo
print &printTwo #То же самое
  • Константа

Константа представляет собой неизменяемое значение. Использование:

use constant MY=>2;
print MY;
  • Файловый дескриптор

Представляет собой указатель на файл, устройство или PIPE канал, открытые для записи, чтения или для записи и чтения

Использование:

$s=<STDIN>; #Читаем одну строку из дескриптора STDIN (стандартный поток ввода)
@values=<FILE>; #Читаем все строчки из некоторого открытого и связанного с дескриптором FILE файла.
print STDOUT $s; #Печатаем в STDOUT (стандартный поток вывода)

[править] Регулярные выражения

В Perl встроена мощная поддержка регулярных выражений. Благодаря этому Perl очень эффективен для обработки текстов. Бо́льшая часть работы с регулярными выражениями производится при помощи операторов =~, m// и s///.

Оператор m// используется для проверки на совпадение. В простейшем случае результат выражения $x =~ m/abc/ будет истинным, если и только если строка $x будет соответствовать регулярному выражению abc. Например:

Пример Значение
$x =~ /abc/ Строка $x содержит (под)строку «abc». Начальная буква «m» оператора при использовании // может быть опущена.
$x =~ m/a(.{1,3})c/ Строка $x содержит букву «a», затем от одного до трех любых символов, и затем букву «c». Найденные символы будут сохранены в переменную $1.
$x =~ m{^p(erl|ugs)$}i Строка $x строго равна «perl» или «pugs» без учета регистра. Так же, вместо // регулярное выражение окружено в {}.


Поиск и замена выполняются при помощи оператора s///. Конструкция $x =~ s/abc/def/; заменит первое вхождение регулярного выражения abc на строку def.

Пример Значение
$x =~ s/abc/def/g; Все вхождения (на что указывает флаг /g — global) подстроки «abc» в $x будут заменены на «def».
$x =~ s/a(.{1,3})c/!$1!/; Первое вхождение в $x буквы «a», затем от одного до трех любых символов, и затем буквы «c». будет заменено на эти символы между «a» и «c», окруженные «!». Например, «syntactic» станет «synt!cti!».
$x =~ s{^p(erl|ugs)}{"P" . lc $2}$/ieg; Здесь показан пример использования модификатора /e, указывающего на то, что вместо строки замены будет написан код, результат выполнения которого надо использовать. Все вхождения «perl» или «pugs» в любом регистре будут заменены на «Perl» и «Pugs», соответственно.

[править] Поэзия в Perl

На Perl можно даже писать стихотворения. Одно из таких стихотворений под названием «Black Perl» («Чёрная жемчужина» или «Чёрный перл») было упомянуто Ларри Уоллом в первоапрельском письме в Usenet. Оно было написано изначально для Perl 3, и по словам самого Ларри, он испытал моральное удовлетворение, когда стихотворение не прошло синтактический анализатор в Perl 5.

BEFOREHEAD: close door, each window & exit; wait until time.
 open spellbook, study, read (scan, select, tell us);
 write it, print the hex whole each watches,
 reverse its length, write again;
 kill spiders, pop them, chop, split, kill them.
 unlink arms, shift, wait & listen (listening, wait),
 sort the flock (then, warn the "goats" & kill the "sheep");
 kill them, dump qualms, shift moralities,
 values aside, each one;
 die sheep! die to reverse the system
 you accept (reject, respect);
 next step,
 kill next sacrifice, each sacrifice,
 wait, redo ritual until "all the spirits are pleased";
 do it ("as they say").
 do it(*everyone***must***participate***in***forbidden**s*e*x*).
 return last victim; package body;
 exit crypt (time, times & "half a time") & close it,
 select (quickly) & warn your next victim;
 AFTERWORDS: tell nobody,
 wait, wait until time;
 wait until next year, next decade;
 sleep, sleep, die yourself,
 die at last

[править] Примечания


[править] Редакторы

DzSoft Perl Editor

PSPad

[править] См. также

[править] Ссылки

  • www.perl.org — Официальный сайт языка Perl
  • www.cpan.org — Архив библиотек для языка Perl
  • perl6.ru — информация о новой версии Perl 6
  • forum.vingrad.ru/Perl-forum.html — русскоязычный форум о Perl на Vingrad
  • ru_perl — русскоязычное комьюнити в ЖЖ
  • kiev.pm — Активное комьюнити серьезных разработчиков на Perl
  • brainworker.ru — поиск по сайтам о Perl

[править] Документация

  • perlintro — краткое введение и обзор Perl’а
  • perlsyn — синтакс Perl’а
  • perlre — регулярные выражения в Perl

[править] Обучение

[править] Мероприятия

  • May Perl — российская конференция YAPC::Russia «May Perl» 2008 (Москва, 17—18 мая 2008 года)
  • Perl Mova — первый украинский семинар «Perl Mova» (Киев, 23 февраля 2008)
  • Perl Today — первый российский семинар «Perl Today» (Москва, 26 октября 2007)
  • BY Perl - первый белорусский семинар, посвященный языку программирования Perl (Минск, 12 октября 2008)
  • Far East Russian Perl Workshop - дальневосточный Perl-семинар(Владивосток, 13 сентября 2008)

[править] Литература

  • Пол Уайтхэд Perl: наглядный курс программирования = Perl: Your Visual Blueprint for Building Perl Scripts. — М.: «Диалектика», 2001. — С. 280. — ISBN 0-7645-3478-5
  • Линкольн Д. Штайн, Разработка сетевых программ на Perl: Пер. с англ. — М. : 2001. — 752 стр. с ил., Издательство «Вильямс».


aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -