Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу).
Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Внимание! Прочитайте, пожалуйста, текст в правой колонке (внизу). Homepage Карта сайта Версия для печати

Джентльменский набор Web-разработчика   Ларри Уолл о Perl6   Наблы Система Orphus
 

2. Если слон на кита влезет, кто кого сборет? Или война религий: PHP и Perl

[3 августа 2001 г.]

  Язык может считаться законченным только тогда, когда в его синтаксисе задействованы все символы на клавиатуре.
Ларри Уолл, изобретатель Perl

Настоящим открывается цикл статей, посвященных сравнению Perl и PHP — конечно, если рассматривать их только как языки для Web-программирования. Попробуем выяснить, что к чему.

Начнем с примера. Вот минимальная программа на PHP, которая еще выполняет какие-то логичные действия:

<?="Hello, ".@$name."!"?>
<form action=hello.php method=get>
<input type=text name=name>
</form>

А вот то же самое, но на Perl. К превеликой радости любителей PHP, код очень велик и скучен, а также изобилует всякого рода специальными символами, способными соревноваться по загадочности с древнешумерскими письменами:

#!/usr/bin/perl -w
print "Content-type: text/html\n\n";
foreach my $pair (split(/&/,$ENV{QUERY_STRING})) {
    my ($k,$v)=split /=/,$pair,2;
    $k=~s/%([0-9a-fA-F]{2})/chr(hex($1))/ge;
    $v=~s/%([0-9a-fA-F]{2})/chr(hex($1))/ge;
    $$k=$v;
}
defined $name or $name="";
print "Hello, $name!";
print "<form action=hello.pl method=get>";
print "<input type=text name=name>";
print "</form>";

Впрочем, к синтаксису Perl со временем привыкаешь, как к неизбежному. Можно даже сказать, перестаешь его замечать. (Впрочем, можно ли перестать замечать боль или заедание пробела на клавиатуре? Лично мне последнее не удавалось никогда.)

Что произойдет, если мы допустим небольшую синтаксическую ошибку в первом скрипте? В общем-то, ничего страшного. PHP сообщит об этом непорядке прямо в окно браузера, и мы сразу же сможем исправить недоразумение, переключившись на окно текстового редактора — «куй железо, пока Горбачев».

Если же теперь допустить синтаксическую ошибку в Perl-скрипте (например, пропустить пару-тройку точек с запятыми), то произойдет куда более драматическое действо. А именно, сервером (которым в большинстве случаев является Apache) будет выдано стандартное сообщение о 500-й ошибке. При этом программисту черным по серому (в буквальном смысле) напомнят, что причину этой самой ошибки он всегда может посмотреть в лог-файлах сервера.

Лирическое отступление 
Какое хамство! Они бы еще посоветовали обратиться к давно отошедшему в мир отпусков системному администратору. Если программист отлаживает свои скрипты в Windows (что теперь уже совсем не в диковинку), смотреть лог-файлы будет очень и очень неудобно.

Итак, мы видим, что:

  1. PHP яснее, чем простой Perl;
  2. PHP можно встраивать в документ, а в простом Perl приходится использовать множество неудобных вызовов print;
  3. PHP более удобен для отладки, чем простой Perl;
  4. PHP сам умеет обрабатывать формы, а простой Perl — нет.

Вы можете высечь эти слова на камне и повесить над монитором, потому что это правда. Сам Ларри (изобретатель Perl), наверное, был бы с вами согласен. Однако, беря в руки долото и увесистый кусок гранита, вспомните об одном слове. В нем весь смысл этой наблы. Это слово входит в сочетание «простой Perl», что означает «Perl без дополнительных модулей».

Что такое модуль? Это просто кусок кода, который можно подключить (вызвать) в программе:

use ИмяМодуля;

Вот тут-то, образно говоря, и порылась наша собака. Оказывается, существуют модули для Perl, которые делают работу с Perl настолько же легкой, насколько она легка в PHP. Переписав приведенный выше злосчастный пример скрипта с их использованием, получим примерно следующее:

<?use CGI::WebIn; use CGI::WebOut(1); no warnings;?>
<?="Hello, $name!";?>
<form action=hello.pl method=get>
<input type=text name=name>
</form>

Perl ли это? Не совсем, однако всю работу по переводу текста в нужный вид берут на себя модули. Как видите, в этом коде используются все преимущества PHP, а именно:

  1. он встраивается в HTML-документ;
  2. он уже никогда не генерирует 500-ю ошибку, что бы ни произошло, а выводит все сообщения в браузер;
  3. он легко справляется с данными формы.

Что же это за магические модули, и как они работают? Об этом — в следующей набле. А пока хочу заметить, что у PHP остается по крайней мере одно неоспоримое преимущество перед Perl: код на нем значительно более строг и ясен. И Perl уже никогда не догонит PHP по этому показателю.

 
Рекламный блок
   

Важное объявление:
    автор категорически против копирования и распространения в Интернете всех статей «Куроводства» с возрастом, меньшим 6 месяцев. Печальный опыт «расползания» чрезвычайно устаревших ошибочных версий статьи про Apache действительно объясняет такое решение.

Орфография на «Куроводстве»:
    если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter. Выделенный текст будет немедленно отослан вебмастеру, а Вы даже ничего и не заметите — настолько быстро все произойдет.

На заметку:
    если вы уже вскипели насчет дизайна этой страницы, то присмотритесь повнимательнее к названию, почитайте FAQ, сходите по лебедевским местам, как это уже предлагалось выше. Можно ли считать пародию плагиатом? Надеюсь, что нет.

Параметры этой страницы
   
GZip

Ссылки от спонсоров
   


Дмитрий Котеров | 3 августа 2001 г. ©1999-2016 | Генеральный спонсор: Хостинг «Джино» | Контакт Вернуться к оглавлению