Когда-то на нем было написано множество системных скриптов в 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 лет назад, а по нынешним меркам это всё равно что умер.
Удивительно, как до сих пор не начали алфавит развивать, добавляя в него новые буквы и цифры (хотя вот смайлики добавили, да).
ссылка на оригинал статьи https://habr.com/ru/articles/872540/
Добавить комментарий