Перл (язык программирования)

Перл (язык программирования)
Perl
Файл:perl_logo.png
Семантика:

мультипарадигменный: императивный, объектно-ориентированный, функциональный

Тип исполнения:

интерпретатор

Появился в:

1987 г.

Автор(ы):

Ларри Уолл

Последняя версия:

5.10.0 / 18 декабря 2007

Типизация данных:

динамическая

Испытал влияние:

Си, Shell, Лисп

Повлиял на:

Руби, PHP

Perl — высокоуровневый интерпретируемый динамический язык программирования общего назначения, созданный Ларри Уоллом, лингвистом по образованию. Название языка представляет собой аббревиатуру, которая расшифровывается как Practical Extraction and Report Language «практический язык для извлечения данных и составления отчётов». Первоначально аббревиатура состояла из пяти символов и в таком виде в точности совпадала с английским словом pearl, жемчужина. Но затем буква 'A' «потерялась». Талисманом языка Perl является верблюд — не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.

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

Perl также знаменит огромной коллекцией дополнительных модулей 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 и Снобол предоставляют возможность использовать более полно метод программирования «сопоставления с образцом», частным случаем которого и являются регулярные выражения.

Существует также полноценный

Содержание

Синтаксис языка Perl

Синтаксис Perl имеет много общего с синтаксисом языков Си, Awk, 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!";

Дозапись в строку.

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

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

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]; # также напечатать третий элемент, но рекомендуется использовать предыдущую версию
print @array[2,3]; # напечатать третий и четвертый элемент
  • Хеш-таблица представляет собой ассоциативный массив, позволяющий ассоциировать строку (называемую ключ) со скаляром (значение). Строка называется ключом, а скаляр в хеш-таблице значением. Перед именем переменной-списка необходимо ставить знак процента '%', а для доступа к определенному элементу массива рекомендуется ставить знак '$'.

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

%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;

или непосредственная запись ссылки на скаляр в таблицу имен

*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 $1}ieg; Здесь показан пример использования модификатора /e, указывающего на то, что вместо строки замены будет написан код, результат выполнения которого надо использовать. Все вхождения «perl» или «pugs» в любом регистре будут заменены на «Perl» и «Pugs», соответственно.

Поэзия в Perl

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

 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


Редакторы

  • ActiveState Komodo
  • EPIC - Perl Editor and IDE for Eclipse

См. также

Ссылки

Документация

  • perlintro — краткое введение и обзор Perl’а
  • perlsyn — синтакс Perl’а
  • perlre — регулярные выражения в Perl
  • perlfaq — ответы на часто задаваемые вопросы по Perl (также см. русский перевод)

Видео

  • YAPC::TV — видеозаписи с Perl-мероприятий

Обучение

  • Perl 6 Tutorial — видеозаписи серии докладов, сделанных на украинском воркшопе «Perl Mova» 23 февраля 2008 года.

Сообщества

В России

На Украине

В Белоруссии

  • Minsk.pm (Минск)

Литература

  • Рэндал Л. Шварц, Брайан Д. Фой и Том Феникс Perl: изучаем глубже. — O'Reilly, "Символ", 2007. — ISBN 978-5-93286-093-9
  • Пол Уайтхэд Perl: наглядный курс программирования = Perl: Your Visual Blueprint for Building Perl Scripts. — М.: «Диалектика», 2001. — С. 280. — ISBN 0-7645-3478-5
  • Линкольн Д. Штайн, Разработка сетевых программ на Perl: Пер. с англ. — М. : 2001. — 752 стр. с ил., Издательство «Вильямс».


Wikimedia Foundation. 2010.

Игры ⚽ Поможем сделать НИР

Полезное


Смотреть что такое "Перл (язык программирования)" в других словарях:

  • Язык программирования Рубин — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Рубин (язык программирования) — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • перл — из англ.: practical extract and report language язык программирования http://perl.org/​ комп. перл Перл из англ.: practical extract and report language язык программирования …   Словарь сокращений и аббревиатур

  • Перл — многозначное слово Содержание 1 Топоним 2 Имя 3 Фамилия 4 Другое …   Википедия

  • Хронология языков программирования — Списки языков программирования По категориям Хронологический Генеалогический Хронология языков программирования  упорядоченный в хронологическом порядке список языков программирования. Содержание …   Википедия

  • ДРАКОН (алгоритмический язык) — У этого термина существуют и другие значения, см. Дракон (значения). Пример блок схемы алгоритма на языке ДРАКОН  дракон схемы ДРАКОН (Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность)  визуальный… …   Википедия

  • Список языков программирования — Списки языков программирования Алфавитный По категориям Хронологический Генеалогический Цель этого алфавитного списка языков программирования состоит в том, чтобы дать полный перечень всех существующих языков программирования, как используемых в… …   Википедия

  • Руби IDE — Ruby Семантика: мультипарадигмальный Тип исполнения: интерпретатор Появился в: 1995 г. Автор(ы): Юкихиро Мацумото Последняя версия: 1.9.1 …   Википедия

  • Perl — Семантика: мультипарадигменный: императивный, объектно ориентированный, функциональный Тип исполнения: интерпретатор Появился в: 1987 Автор(ы) …   Википедия

  • Вирт, Никлаус — Никлаус Вирт Niklaus E. Wirth …   Википедия


Поделиться ссылкой на выделенное

Прямая ссылка:
Нажмите правой клавишей мыши и выберите «Копировать ссылку»