Забытые технологии: Perl
Когда-то на нем было написано множество системных скриптов в UNIX/Linux, а сейчас он ИМХО незаслуженно позабыт, и новое поколение программистов даже считает его «плохочитаемым», отдавая предпочтение более модным и современным языкам с синтаксисом еще более древнего PL/1
Хотя как он может быть непонятным и плохочитаемым, если типовая «первая программа Hello world!» выглядит буквально так:
print "Hello, world!";
Посколько perl изначально все-таки для UNIX, то и программы для него, как правило, в типичном стиле для shell-скриптов начинаются со строчки запуска интерпретатора:
#!/usr/bin/perl
print "Hello, world!";
Для пришельцев из windows-мира, которые до сих пор не знают зачем это нужно — это позволяет просто обозначить файл как исполняемый и запускать его, как любую другую программу, не указывая дополнительно чем и как его интерпретировать — это как раз и написано в первой строчке.
В языке есть переменные, которые начинаются со знака $, точно так же как в sh, bash или PHP, например. Это на самом деле довольно удобно, сразу понимаешь, где переменная.
my $a = 2;
my $b = 3;
my $c = $a * $b;
print "$c\n";
Ключевое слово my обьявляет переменную в рамках области видимости. В данном случае область видимости — весь скрипт с момента обьявления переменной, но если ограничить ее скобками { … } — то видимость тоже будет ограничена.
# комментарий
my $a = 1;
{
my $a = 8;
print "$a\n"; # результат 8
}
print "$a\n"; # результат 1
Всякие циклы как в С:
for( my $i = 0 ; $i < 10 ; $i++ ){
print "$i ";
}
# "0 1 2 3 4 5 6 7 8 9 "
Есть дополнительные штуки типа foreach и elsif:
my @array = [0,1,2,3,23,44,23,23453,5];
foreach my $item (@array){
if ($item < 2) {
print "Less than 2\n";
}
elsif ($item < 10){
print "Less than 10 but greater than 2\n";
}
else {
print "hz...\n";
}
}
(а кого бесят скобки — вспоминайте про область видимости, иногда очень удобно ограничить ее для одних, локальных переменных, при этом пользуясь другими, общими, объявленными выше)
Есть множество встроенных функций, man perlfunc, и можно писать свои:
sub my_func {
my ($arg1, $arg2, $arg3) = @_;
print "$arg1 * $arg2 = $arg3!\n";
my $x = $arg1 * $arg2;
print "На самом деле нет: $x\n";
}
my_func(32768, 100500, "Неисчислимое количество");
# "32768 * 100500 = Неисчислимое количество!"
# "На самом деле нет: 3293184000"
Есть подключаемые библиотеки, которые позволяют делать почти всё что угодно, если кто-то удосужился соотвестствующую библиотеку написать:
use pQuery;
my $page = pQuery("http://google.com/");
my $title = $page->find('title');
print "The title is: ", $title->html;
Ну и конечно, регулярные выражения:
my $a = "Мама мыла раму";
if( $a =~ /^(Мама)\s(мыла .*)$/){
my $who = $1;
my $do = $2;
$do =~ s/мы/пи/;
$do =~ s/аму/ом/;
print "$who $do\n";
}
В общем, полноценный язык программирования, на котором можно писать как простые системные скрипты, так и сложные веб-системы.
Другой вопрос, что он очень гибкий и пофигистичный, и то же самое можно написать примерно вот так:
my$a="Мама мыла раму";if($a=~/^(Мама)\s(мыла .*)$/){$a=$1;my$x=$2;$x=~s/мы/пи/;$x=~s/аму/ом/;print"$a $x\n";}
и оно всё еще будет работать, но вот поддерживать потом такой «скрипт» — да легче новый язык программирования придумать!
И это мы еще не углублялись в загадочный мир встроеных переменных типа $_,@_,$!,$|,$<,...
В общем, никто за программиста не подумает, кроме самого программиста.
Но — как сейчас говорят, «он давно не развивается». Отдельные попытки где-то что-то поломать не в счет, работает он так же как и 10 лет назад, а по нынешним меркам это всё равно что умер.
Удивительно, как до сих пор не начали алфавит развивать, добавляя в него новые буквы и цифры (хотя вот смайлики добавили, да).
Habrahabr.ru прочитано 1409 раз