Пятница , 29 Март 2024
ДомойПубликацииphp и perl, part 1

php и perl, part 1

php и perl

отрицательного отношения к perl`у никогда не испытывал. как бы первый php был создан именно на нём, что уже говорит кое о чём. но само изучение постоянно откладывалось «на потом». в своё оправдание могу сказать словами из анекдота*: «не учил потому, что он мне был на фиг не нужен».

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

теперь главное: статья не тема святой войны между “паладинами perl” и “быдлокодерами php”. после пристального ознакомления смею заверить: быдлокод скорее возможен на perl; php более строг и при умелом обращении программирование на нём сводится к сплошному удовольствию.

для начала хочу заметить, что переход с си-подобного языка на perl сопряжён с некоторого рода трудностями (зная c или javascript гораздо проще будет освоить php).

самая главная проблема при программировании на perl для web это ошибка 500. подавляющее большинство, попробовав написать первую программу замечают, что она же является и последней. попытка что-то спросить (особенно если упомянуть, что до этого программировал на php) приводит к пачке насмешек, что тоже не способствует популяризации языка. подход php более удобен: ошибка выводится в браузер, но это, в свою очередь, начинающих очень нервирует. и когда новички узнают про оператор @, писку ихнему нет предела; ошибка забарывается, не успев начавшись. плохо ли это? очень! но, как и в html, можно писать логически неверные вещи — интерпретатор всё благополучно «скушает» и выдаст именно тот результат, который требуется. perl`у этого для быстрого вхождения не хватает.

едем дальше. простой perl-код:

if ($a == 1) print 'yes';

приводит к неожиданной ошибке. правильно так:

if ($a == 1) { print 'yes'; }

. да-да, не забываем фигурные скобочки. javascript и php понимают оба варианта.

«пустяк», скажут перловчане? вот ещё код:

if ($a == 'id') { print 'yes'; }

. круто? ещё бы! а работает? однозназно да! только не так, как требуется. чтобы побороть подставу и заставить заработать условие как нужно, потребуется маленькая правка:

if ($a eq 'id') { print 'yes'; }

. прямо скажу, засада оказалась тоже весьма неожиданной. строковые данные следует сравнить иначе, нежели целые.

ещё одна подстава, и снова связана с условием:

if ($a == 1) { print 'yes'; }
elseif ($a == 2) { print 'no'; }
else { print 'undefined'; }

пишем, радуемся, запускаем и получаем ошибку 500. почему так? а потому, что в псевдо-си-подобном perl нет операнда elseif. код требуется изменить:

if ($a == 1) { print 'yes'; }
elsif ($a == 2) { print 'no'; }
else { print 'undefined'; }

ума не приложу, зачем вместо elseif понадобилось использовать elsif. но так есть.


* Приезжает новый помощник шерифа в городок на Диком Западе. Шериф ему показывает город, знакомит с местными жителями.
Вдруг на полном скаку на главную улицу вылетает всадник — лицо закрыто маской, шляпа надвинута на глаза — и скрывается за поворотом.
— А это кто?
— Не обращай внимания, это неуловимый Джо.
— А почему неуловимый?
— Да нахрен он кому нужен!

Рейтинг: 0

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

2 070
не в сети 11 месяцев

x64 (aka andi)

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

11 комментариев

  1. Егор Проскурин

    По многим вопросам не согласен. Перечислю.
    1) Ошибка 500 — не проблема, если хочется в браузер выводить — за два чиха можно это сделать. Можно заюзать фреймворк типа Catalyst, он это автоматом делает.
    2) В чем более строг ПХП? В том, что для сортировки массивов есть сдесяток функций?) Это только лишний геморрой создает.
    3) if ($a == 1) print ‘yes’; — то что тут нужны фигурные скобочки, опять же, скорее о строгости языка говорит. но в перле обычно пишут не так, а так —
    print «yes» if $a == 1; и не нужны никакие скобочки.
    4) == и eq, два оператора, так и должно быть, тк не всегда очевидно что ты сравниваешь. А уж после rsort, asort я бы вообще молчал. smile
    5) elsif на один символ короче smile

    Рейтинг: 0
    • 1) а как Вы думаете, почему php попёр в гору, а perl остался уделом избранных? уж не из-за того ли, что php, встретив ошибку, выводил её в браузер пользователю, а перл «ласково» ругался 500 ошибкой и посылал смотреть логи? php более дружественен к людям, пишущем на нём. в перле есть хорошие методы борьбы с 500 ошибкой, но почему они не доступны сразу и из коробки?

      2) функции сортировки геморроя не создают. если человек, пишущий на php, не знает какую либо функцию, он просто вобъёт её в поиск и мгновенно получит ответ. а вот поиск по ограничителям регулярок в перловских манах не особо удобен;

      3) слова «в перле обычно пишут не так» следует понимать как «я пишу не так». и обратная запись сравнения не всегда удачно вписывается программистами в код. порой с первого раза даже непонятно, что, собственно, код делает;

      4) если человек не знает, что сравнивает, это уже явно не косяк языка, а недостаточная проработка архитектуры программы. и нескольких сравнений уж точно можно избежать. сомневаетесь? javascript в помощь. и чем же asort/rsort не устраивают? как я уже говорил, это функции, и достаточно один раз прочитать их описания, после чего всё встанет на свои места:
      — sort — сортировка по значениям, после работы хеш превращается в список;
      — rsort — аналогично предыдущему, только сортировка в обратную сторону;
      — asort — сортировка по значениям с сохранением ключей;
      — arsort — аналогично предыдущему, но значения располагаются в обратном порядке.

      5) когда в оправдание сказать нечего, уже стало за правило символами мериться. если делали синтаксис си-подобный, глупо было не использовать что-то более привычное.

      вообще, холиваров на подобные темы много: php vs perl, mysql vs postgresql, и ещё пачка. так получается, что одни вещи являются инструментами для жжёных старообрядцев, а вторые пусть и не такие мощные, зато более удобные и дружественные.

      Рейтинг: 0
  2. Егор Проскурин

    Еще раз здравствуйте! smile
    Ну что же Вы, сразу так с агрессией? Я просто решил поделиться своим мнением, а Вы перешли на тему «у кого писька длиннее?». smile
    Я вообще-то говорил именно насчет того, что написано в статье, а не о том, какой язык лучше. Очевидно, что каждый инструмент хорош тогда, когда владеешь им в совершенстве. То, что «PHP попер в гору», я думаю, результат более низкого порога вхождения в язык, т.е. с него попроще начать. И не думаю, что это особо связано с 500ой ошибкой, Перл не только в веб используется. Может моя инфа неактуальна, но когда я чуть-чуть юзал ПХП, то в нем были две огромные проблемы — с Юникодом и с многопоточностью. Не знаю, может уже в новой версии сделали это нормально.
    Что касается sort. Представьте, что пишите приложение, например, расчета вероятности события в зависимости от закона распределения вероятности. Вы будете писать одну функцию chance и передавать ей в параметрах все, что нужно? Или наплодите normal_chance, pareto_chance, bernulli_chance и тд? Вы, уверен, сами знаете, что второй вариант убог, однако именно так сделано с сортировкой в ПХП. А это засоряет пространство имен и увеличивает объем исходного кода многократно. Кроме того, начинающий программист видит, как это сделано и начинает повторять.
    Теперь насчет elsif, думал что Вы поняли, что я просто пошутил насчет того, что на 1 символ короче. На самом деле особого значения не имеет как писать, привыкаешь быстро.

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

      я не говорю, что исключительно из-за 500-ой ошибки. просто представьте, что человек, далёкий от консолей (виндузятник матёрый) установил себе апач, и к нему прикрутил перл и пхп. написал по простейшему скрипту: print ‘Hello,’ World!’; (да, с ошибкой) и попытался их выполнить в браузере. в результате пых ругнётся на ошибку разбора, перл кинет ошибку 500. человек слыхом не слыхивал ни про какие логи (виндузянник же), и лезет на перл-форум спросить, почему же скрипт выдаёт такое безобразие. и что ему ответят «самые добрые и терпимые» программисты на перле? явно ничего хорошего. и в пользу чего он сделает свой выбор, ответ очевиден. правда, есть одно но: изучение продолжит, только если это действительно необходимо (допусте, хочется под себя заточить какой-то скрипт).
      и да, я знаю, что перл это не веб. но статья про веб всё-таки. поэтому ту часть людей, которая пользуются perl для автоматизации рутины на компах, очень хорошо понимаю. пхп для этого слабо подходит.
      про проблемы с юникодами слышал, но только в отношении опять-таки перла. с появлением в php библиотек iconv и mb_, а также модификатор регулярок u проблемы закончились (было это ещё в версии 4, так давно, что про utf-8 тогда мало кто слышал, а яндексы ещё крутились на windows-1251).

      да, куча функций, конечно, больная тема. и разработчики уже, думаю, порядком себе локти покусали. тем более, что простанство имён появилось только в версии 5.3, так что людям приходилось довольствоваться «затычками». но! для конечного пользователя, в принципе, всё равно: запомнить одну функцию с кучей параметров или несколько простых процедур, каждая из которых выполняет свою сортировку. я это не поддерживаю, с одной стороны, но с другой как сделали, так и стало (а кому надо, уже привыкли). ну и по поводу начинающих программистов тоже неоднозначно. скорее, постоянный 10-кратный if зло не меньшее, чем десяток функций, выполняющих, по сути, одно и тоже.

      ну и про elsif. дело тут даже не в том, что быстро привыкаешь. когда мне потребовался перл, в недоумение повергла ошибка в месте else if/elseif: ни одно из этого не подходило. пришлось зарыться в маны, и только там нашёлся ответ. аналогично было, когда мне потребовался перебор, и отказались работать break/continue. да, здорово, когда новый язык похож на что-то уже знакомое. но когда он оказывается «похож, но некоторые операторы названы по другому», это уже злит, не говоря о том, что мешает работе.

      Рейтинг: 0
  3. Егор Проскурин

    Кстати, в последних версиях Perl есть уже break/continue.
    Раз уж речь идет о вебе, я вообще не считаю, что на «голом» Perl целесообразно что-то делать боле-менее сложное, а надо использовать фреймворк типа Catalyst’a. А раз так, то актуально сравнивать возможности Drupal (или что там самое передовое в PHP) и Catalyst.
    Используете Drupal или что-то подобное?

    Рейтинг: 0
  4. Егор, так всё же развивается, и это хорошо. вон, в FireBird, тоже добавили очень удобное поле автоинкремента, раньше же нужно было генераторами оперировать. Только выход новых версий программных продуктов как-то задерживается: mysql 6, php 6, и т. д. и т. п. наверное, скоро майкрософт всех вытеснит.

    можно и посравнивать, конечно. со стороны пхп CodeIgniter как фреймворк, Drupal как cms/фреймворк, и цемеэска DLE.

    под веб мне ничего существенного на перле разрабатывать не пришлось, так что Catalyst может оказаться весьма кстати, если решу шагать в эту сторону.

    Рейтинг: 0
  5. Егор Проскурин

    Ну perl6 уже 12 лет выходит. smile
    И уже, я думаю, на своем программистском веку не застану его. smile
    Хотя реализация есть, но очень «сырая» и невероятно медленная.
    Вот, кстати, пример — games.mail.ru/mini/
    порядка 150к запросов в секунду. Проект сделан на Каталисте. Запросы тоже через стандартный ORM идут. DBIx::Class называется. Эта штука может все и еще чуть-чуть! И я всем ее рекламирую.

    Рейтинг: 0
    • разработка пхп 6 была признана, как бесперспективняк. видимо, вряд ли когда она уже увидит свет.
      150к запросов. начинающему перл-программисту, на мой взгляд, это может потребоваться в случае разработки многопользовательской игры. с прицелом на то, что если вдруг игра станет популярной, сервер внезапно не сляжет. ну а если время вхождения в особенности каталиста совсем невелико, тогда действительно грех им не пользоваться.
      спасибо, нашёл сайт http://www.catalystframework.org/ буду смотреть, что там есть smile

      Рейтинг: 0
  6. Егор Проскурин

    ну понятно, для многопользовательских игр там используются игровые сервера. но не суть дела. основная суть Catalyst в том, что можно сосредоточиться только на написании логики приложения, избавляясь от многих рутин. При этом в отличие от Django в Python, программиста не ограничивают в выборе решений. Если интересен будет Catalyst — всегда готов подсобить.

    Рейтинг: 0
  7. PERL — это идеология… Его начинаешь понимать после нескольких лет программирования на нем…

    Рейтинг: 0
  8. ))) холивары всегда были и будут. а по мне так нужно просто с душой и качественно делать то, что умеешь и всё. а пытаться доказать что «твои гугу гуровее всех гур вместе взятых»… это хня какая-то.
    З.Ы.
    с куда бОльшим интересом почитал переписку, чем саму статью.
    Спс. )))

    Рейтинг: 0

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

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

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

Принять