Perl (Перл) — язык программирования. Создатель Ларри Уолл. Само слово
Perl — аббревиатура, которая расшифровывается как
Practical Extraction and Report Language (практический язык извлечений и отчётов, отчего сначала язык назывался
PEARL,
но затем буква «A» «потерялась»). Существует также ряд других
вариантов. Согласно самому красивому из них, название perl произошло от
слова pearl (жемчужина). Талисманом языка Perl является верблюд — не слишком красивое, но очень
выносливое животное, способное выполнять тяжёлую работу.
Основной особенностью языка считаются его богатые возможности для работы с текстом, реализованные при помощи регулярных выражений.
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.
Пример программы
Простейшая программа Hello world выглядит следующим образом:
#!/usr/bin/perl
print
"Hello, world!
n";
Простой способ умножения на число 10.
$x =
5;
$x .=
0;
print
$x;
А вот так можно напечатать число Гугол.
Типы данных
Три основных типа данных: скаляр, список и хеш-таблица. Переменные разных типов отличаются знаком, который стоит перед именем переменной.
$foo;
# скаляр
@foo;
# список
%foo;
# хеш-таблица
Скалярные переменные используются для хранения одиночных значений.
Они могут содержать числа, строки и ссылки на другие объекты. Перед
именем скалярной переменной необходимо ставить знак доллара '$'. Тип
скалярной переменной не фиксирован (в отличие от, например, языка Си) и определяется динамически в зависимости от контекста. Например,
$x =
10;
# число
$y =
$x +
1;
# используем $x как число…
$z =
$x .
'string';
# … а теперь — как строку
Список является аналогом массива в других языках программирования.
Список может содержать некоторое количество скаляров. Каждый элемент
списка имеет свой индекс, с помощью которого к нему можно получить
доступ. Нумерация элементов начинается с нуля, то есть первый элемент
списка имеет индекс 0. Перед именем переменной-списка необходимо
ставить знак '@'. Многомерные массивы можно смоделировать, помещая в
список ссылки на другие списки.
@array =
(
1,
2,
3,
4
);
# записали в список @array четыре элемента
print
$array
[
2
];
# напечатать третий элемент
Хеш-таблица позволяет ассоциировать строку-
ключ со скаляром-значением. Перед именем переменной-списка необходимо ставить знак процента '%'.
%hash =
(
'cat' =>
'kitten',
'dog' =>
'puppy',
'cow' =>
'calf'
);
print
$hash
{
'cat'
};
Регулярные выражения
В Perl встроена мощная поддержка регулярных выражений.
Благодаря этому Perl очень эффективен для обработки текстов. Бо́льшая
часть работы с регулярными выражениями производится при помощи
операторов =~, m// и s///.
Оператор m// используется для проверки на совпадение. В простейшем случае результат выражения $x =~ m/abc/ будет истинным если и только если строка $x будет соответствовать регулярному выражению abc. Например:
|
Пример |
Значение |
$x =~ /abc/ |
Строка $x содержит (под)строку «abc». Начальная буква «m» оператора при использовании // может быть опущена. |
$x =~ m/a(.{1,3})c/ |
Строка $x содержит букву «a», затем от одного до трех любых символов, и затем букву «c». Найденные символы будут сохранены в переменную 13. |
$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/!5!/; |
Первое вхождение в $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
источник: wikipedia.org
|