Четверг , 12 Декабрь 2024
ДомойПубликацииphp и perl, part 3

php и perl, part 3

php и perl

окончание мини-опусов № 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 и т. д.). само-собой, желательно это проделать на сайте с достаточно большой посещаемостью. только в этом случае можно будет сравнивать результаты. но, скорее всего, разница между лидером и аутсайдером теста будет невелика; в противном случае, её было бы заметно “на глазок”.

Рейтинг: 0

Автор публикации

2 070
не в сети 4 месяца

x64 (aka andi)

Комментарии: 2893Публикации: 405Регистрация: 02-04-2009
Так себеНеплохоХорошоЗамечательноСупер! (Оценок пока нет)
Загрузка...

2 комментария

  1. по поводу sub посмотрите в сторону basic ;-)
    а вообще посмотрите на моем сайте две статейки («Perl/Php трансляция» и «Алена Федосеева — Приложение 2. Спецификация языка Perl») и будет проще понять перл.
    php сам по себе ориентирован на веб
    попробуйте написать cgi на перле а скажем на c, pascal, python и поймете что на php это будет чуточку быстрее из-за отсутствия ошибки 500
    НО perl не только и не столько для веба в отличии от php.
    да и вообще перл заточен для обработки текста, поэтому сфера его примения лично у меня не для веба а для других задач.
    P.S.:игра Frozen Bubble написана на перле. удачи в познаниях

    Рейтинг: 0
    • да-да-да, табличка очень наглядная. единственно что, где же там моменты, касающиеся сравнений перловских/пыхных условных операторов и повтора/прекращения циклов? первый раз для меня было шоком, когда интерпретатор перла (вроде как си-подобного языка) на безобидную elseif выдавал ошибку)

      Рейтинг: 0

Оставить комментарий

Политика конфиденциальности

Наш сайт использует файлы cookies, чтобы улучшить работу и повысить эффективность сайта. Продолжая работу с сайтом, вы соглашаетесь с использованием нами cookies и политикой конфиденциальности.

Принять