окончание мини-опусов № 1 и № 2, посвящённым трудностям освоения языка perl.
рассмотрим ещё несколько забавных моментов. например, момент, касающийся вызова perl`овских функций. как думаете, какой из вариантов правильный:
opendir(TMPDIR, '.');
или
opendir TMPDIR, '.';
? возможно, это кого-то удивит, но правильны оба варианта. в принципе, ничего страшного, если вспомнить альнернативные варианты циклов/условий на php:
foreach () {}
и
foreach (): endforeach;
,
echo('str');
и
echo 'str';
и т. д. но! стиль программирования без скобок очень может превратить код в быдло-код. следующий код выводит листинг текущей директории:
opendir TMPDIR, '.';
@files = readdir TMPDIR;
closedir TMPDIR;
print join '<br>', sort @files;
первые 3 команды худо-бедно ясно, что делают. а вот в последней уже намечается проблема: мой редактор подсвечивает аж 3 ключевых слова, поэтому с первого взгляда не совсем ясно, что к чему.
функции
конечно, дело вкуса, но тем не менее неясно, зачем нужно было для такой тривиальной задачи придумывать собственное название оператора. функция определяется так
sub имя_функции {}
. sub это видимо от стародревнего subroutine. чем так плоха оказалась function — одним разработчикам известно.
возможно, кому-то может показаться, что perl мне не нравится. смею заверить, что это не так. а уж за перехват входного потока
INPUT
что называется «из коробки» разработчикам вообще громадный поклон. однако, моё мнение, в некоторых местах языку следовало бы допускать меньше вольностей.
где-то давно читал статью про сравнение php и perl. так, php получил минус за то, что он, якобы, допускает использование «нестандартных» приёмов, в то время, как perl — язык с “устоявшимся” набором операторов. уж не знаю, чего курил автор того опуса, но неужто строка
print join '<br>', sort @files;
легка для восприятия? а подобные вещи, между прочим, встречаются во многих perl-скриптах.
отработываешь код на php и встречается, допустим, неизвестная конструкция:
$arr = array_reverse($a);
сразу понятно, что переменной присваивается результат вызова функции. поэтому достаточно поискать в мануале описание array_reverse. и всё. неважно, вася пупкин писал данный код или петя жопкин: мануал однозначно ответит на вопрос о том, что делает функция и что означает каждый из её входных параметров. неужто это сильно сложнее perl`овских:
use strict;
use LWP::UserAgent;
если уж было такое утверждение, очевидно, автор в своих работах использует исключительно “чистый” perl, заодно лишаясь конструкций
switch..case
(да-да, в perl такого нет), средств модулей
LWP, Archive
и много другого. и поэтому возникает вопрос: возможно ли в данном случае написать в одиночку что-то глобальное и достойное, читай, изобрести велосипед, который будет ну нафиг никому не нужен?
итог
оба языка достойны, и каждый нашёл (и ещё наверняка найдёт) свою нишу. однако у них уже есть монструозные и просто крупные противники в лице “расширений”, а то и целых платформ: .net, java, ruby, python.
и если в споре кто-то будет уверять, что какой-то из этих языков по неким тестам быстрее, данному человеку можно смело плюнуть в лицо. скрость работы должна определяться не набором тестов, а конкретным боевым тестированием. вполне подойдёт такой вариант: взять 6 однотипных серверов с одинаковой начинкой; на каждом установить свою систему, а на сервер №7 установить БД для хранения данных. после этого на каждом языке реализовать некий сайт (идентичный) и, допустим, ежечасно менять основной сервер (1 час работал сервер с php, следующий час — с perl и т. д.). само-собой, желательно это проделать на сайте с достаточно большой посещаемостью. только в этом случае можно будет сравнивать результаты. но, скорее всего, разница между лидером и аутсайдером теста будет невелика; в противном случае, её было бы заметно “на глазок”.
днём интернета
шоколадкой для работы мозга
коробочкой ароматного чая для бодрости
продлением хостинга на +1 месяц
по поводу sub посмотрите в сторону basic ;-)
а вообще посмотрите на моем сайте две статейки («Perl/Php трансляция» и «Алена Федосеева — Приложение 2. Спецификация языка Perl») и будет проще понять перл.
php сам по себе ориентирован на веб
попробуйте написать cgi на перле а скажем на c, pascal, python и поймете что на php это будет чуточку быстрее из-за отсутствия ошибки 500
НО perl не только и не столько для веба в отличии от php.
да и вообще перл заточен для обработки текста, поэтому сфера его примения лично у меня не для веба а для других задач.
P.S.:игра Frozen Bubble написана на перле. удачи в познаниях
да-да-да, табличка очень наглядная. единственно что, где же там моменты, касающиеся сравнений перловских/пыхных условных операторов и повтора/прекращения циклов? первый раз для меня было шоком, когда интерпретатор перла (вроде как си-подобного языка) на безобидную elseif выдавал ошибку)