Saturday, January 21, 2012

perlfaq1http://beshenov.ru/perlfaq/1.html

perlfaq1 — основные вопросы о Perl

Этот раздел FAQ отвечает на очень общие, высокоуровневые вопросы о Perl.
Что такое Perl?
Кто поддерживает Perl? Кто его разрабатывает? Почему он бесплатен?
Какую версию Perl использовать?
Что такое Perl 4, Perl 5, Perl 6?
Что там был за Ponie?
Что такое Perl 6?
Насколько Perl стабилен?
Сложно ли изучить Perl?
Как Perl соотносится с другими языками вроде Java, Python, REXX, Scheme или Tcl?
Можно ли на Perl сделать...
Когда не стоит программировать на Perl?
Какая разница между «perl» и «Perl»?
Это программа на Perl или скрипт на Perl?
Что такое JAPH?
Где можно найти сборник шуток Ларри Уолла?
Как мне убедить других использовать Perl?

Что такое Perl?

Perl — язык программирования высокого уровня с эклектичным наследием, написанным Ларри Уоллом и тысячами других разработчиков. Он происходит от вездесущего языка C и — в меньшей степени — от sed, awk, интерпретатора команд Unix и, по крайней мере, от дюжины других инструментов и языков. Возможности Perl по работе с процессами, файлами и текстами сделали его в особенности подходящим для задач, включающих быстрое создание прототипов, разработку системных утилит и программных инструментов, управление системой, работу с базами данных, программирование графических интерфейсов, работу с сетью и программирование для веб. Эти сильные стороны сделали язык особенно популярным среди системных администраторов и авторов CGI-скриптов, но Perl также используют математики, генетики, журналисты и даже менеджеры. Вам, может, тоже следует.

Кто поддерживает Perl? Кто его разрабатывает? Почему он бесплатен?

Благодаря былой культуре Интернета, в те времена, когда он еще не был массовым явлением, а также глубоким убеждениям автора, Ларри Уолла, perl распространялся открыто и бесплатно. Perl поддерживается своими пользователями. Ядро, стандартная библиотека Perl, дополнительные модули, а также документация, которую вы сейчас читаете — всё это написано добровольцами. Дополнительные детали смотрите в персональных примечаниях в конце файла README, прилагаемого к дистрибуции исходников perl. Об особо значимых версиях Perl написано в perlhist (добавлена в 5.005).
В частности, основные разработчики (the Perl Porters) — шайка косматых альтруистов, бесплатно делающих программное обеспечение, которое лучше того, что можно купить за деньги. Подсмотреть за процессом разработки можно при помощи архивов http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/ иhttp://www.nntp.perl.org/group/perl.perl5.porters/, либо шлюза новостей nntp://nntp.perl.org/perl.perl5.porters (и его веб-интерфейса); или почитайте «The perl 5 porters FAQ». Можете также подписаться на список рассылки, отправив запрос (можно просто пустое сообщение) на perl5-porters-request@perl.org.
Хотя проект GNU и распространяет Perl, никакого «GNU Perl» нет: Perl не делается и не поддерживается во Free Software Foundation. Условия лицензии Perl более либеральны, чем у программного обеспечения GNU.
Если хотите, то можете получить платную поддержку по Perl, хотя всем с лихвой хватает неформальной поддержки.

Какую версию Perl использовать?

(Отвечает Брайан Д. Фой)
Обычно это дело вкуса и убеждений, и один ответ для всех дать нельзя. В целом, вам нужно использовать либо текущую, либо предыдущую стабильную версию. Сейчас это, соответственно, perl5.10.x и perl5.8.x.
Кроме того, нужно рассмотреть многие вещи, и решить, что для вас лучше подходит.
Если всё уже работает, то обновление perl может что-нибудь испортить (по крайней мере, внести новые предупреждения).
В последних версиях perl исправлены многие ошибки.
Сообщество Perl направлено на поддержку самых свежих версий, поэтому проще получить совет касательно них.
Версии до perl5.004 содержат серьезные проблемы с безопасностью, связанные с переполнением буфера; по поводу некоторых выходили рекомендации CERT (например, http://www.cert.org/advisories/CA-1997-17.html).
Самые последние версии, видимо, наименее популярны и опробованы, поэтому, если не хотите рисковать, имеет смысл подождать несколько месяцев после выхода и посмотреть, с какими проблемами сталкиваются окружающие.
Непосредственно предшествующие версии (то есть, perl5.8.x) обычно какое-то время поддерживаются, но не так серьезно, как текущие.
Никто не занимается активной поддержкой Perl 4. Лет пять назад это была туша дохлого верблюда (так было написано в этом тексте), а теперь это просто скелет, и его голые кости переломаны или разъедены.
Выход Perl 6 не намечен, но он появится, как только будет готов. Будьте в курсе дел, но не беспокойтесь о смене основной версии Perl: никто не собирается отнимать у вас Perl 5.
На деле, есть два пути разработки perl: поддерживаемая и экспериментальная версия. Поддерживаемые версии стабильны, второе число в их нумерации четно (например, perl5.10.x). Экспериментальные версии могут включать возможности, которых нет в стабильной ветке; второе число в их нумерации нечетно (например, perl5.9.x).

Что такое Perl 4, Perl 5, Perl 6?

(Отвечает Брайан Д. Фой)
Вкратце: Perl 4 — это прошлое, Perl 5 — настоящее, Perl 6 — будущее.
Номер в названии после «Perl» (например, 5 в «Perl 5») — основная версия интерпретатора perl, а также языка. Каждая основная версия несет значительные изменения, которые не поддерживают прежние версии.
Нынешняя основная версия Perl — Perl 5 — вышла в 1994-м. Она может запускать скрипты предыдущей версии Perl 4 (март 1991-го), но содержит значительные изменения. В ней введено понятие ссылок, сложных структур данных и модулей. Интерпретатор Perl 5 был полностью переписан.
Perl 6 — следующая основная версия Perl, но ее синтаксис и дизайн всё еще разрабатываются. Работа начата в 2002-м и всё еще продолжается. Многие возможности из числа самых интересных показаны в последних версиях Perl 5, а некоторые модули Perl 5 позволяют использовать в программах кое-что из синтаксиса Perl 6. Дополнительную информацию о Perl 6 можно получить на http://dev.perl.org/perl6/.
История версий Perl изложена в perlhist.

Что там был за Ponie?

(Отвечает Брайан Д. Фой)
Ponie — сокращение «Perl On the New Internal Engine». Проект начал в 2003-м Артур Бергман из Fotango, потом его курировала The Perl Foundation. Он был заброшен в 2006-м.
Вместо использования имеющихся внутренних механизмов Perl, Ponie должен был создать новый для перевода с Perl 5 на Perl 6 (и осуществить другие вещи, над которыми сейчас работают в Parrot). Вы сможете просто продолжить использовать Perl 5 вместе с Parrot — виртуальной машиной, компилирующей и запускающей байткод Perl 6.

Что такое Perl 6?

На второй конференции O'Reilly OSCON Ларри Уолл объявил о начале серьезной работы над Perl 6. «Perl 6» часто говорили о проекте Чипа Сальцберга Topaz по переносу Perl на C++. Хотя Topaz и помог во многом понять направление развития следующей версии Perl и ее реализации, он был окончательно заброшен.
Если хотите узнать больше о Perl 6 или вступить в кампанию по улучшению Perl, изучите страницу разработчиков Perl 6.
Выход Perl 6 еще не запланирован, и Perl 5 будет достаточно поддерживаться после выхода шестой версии. Не ждите Perl 6, чтобы сделать что-либо.
Как сказал Ларри Уолл, «Мы решительно настроены по отношению к переделке всего, что нужно переделать».

Насколько Perl стабилен?

Производственные версии, которые включают исправления ошибок и новые возможности, серьезно тестируются перед выходом. Начиная с 5.000, мы выпускаем в среднем одну производственную версию в год.
Ларри и команда разработки Perl иногда вносят изменения во внутреннюю структуру языка, но делается всё возможное, чтобы сохранить обратную совместимость. Хотя не все скрипты Perl 4 безупречно работают в Perl 5, обновление perl практически никогда не делает программу для старой версии perl непригодной (если не считать второстепенные исправления ошибок и редкие добавления ключевых слов).

Сложно ли изучить Perl?

Нет, Perl легко начать изучать и легко продолжать изучать. Он похож на многие языки программирования, с которых вы, вероятно, начинали, поэтому, если вы когда-нибудь писали программу на C, скрипт awk или интерпретатора, или даже программу на BASIC, то вы уже на правильном пути.
Большинство задач требует лишь небольшой части языка Perl. Один из девизов, которым руководствуется Perl — «это можно сделать несколькими способами» («there's more than one way to do it»; TMTOWTDI, иногда произносится как «tim toady»). Так что Perl изучается легко и долго (можно много чего делать, если действительно хотите).
Наконец, так как Perl часто (не всегда и, разумеется, не по определению) — интерпретируемый язык, то вы можете писать программы без промежуточной компиляции, что позволяет быстро и просто их тестировать и отлаживать. Это еще сильнее упрощает изучение Perl.
Perl проще изучать, если у вас есть опыт работы с Unix и программирования на каком-нибудь языке, вы знакомы с регулярными выражениями и можете понимать чужой код. Если вам нужно что-то сделать, то это, скорее всего, уже сделано, и можно будет найти бесплатный рабочий пример. Не забывайте и о модулях Perl.

Как Perl соотносится с другими языками вроде Java, Python, REXX, Scheme или Tcl?

В каких-то областях — хорошо, в других — хуже. Точное определение хороших и плохих областей — во многом дело личных предпочтений, поэтому если задаете подобный вопрос в USENET, то рискуете дать начало бессмысленной священной войне.
Наверное, лучше всего попробовать написать сходный код для выполнения ряда задач. Для этих языков есть свои конференции, в которых можно получить нужную информацию (надеемся, что не развести спор).
Если не можете удержаться, то смотрите некоторые тексты со сравнениями по адресуhttp://perl.com/doc/FMTEYEWTK/versus/.

Можно ли на Perl сделать...

Perl достаточно гибок и расширяем, чтобы использоваться практически для любых задач, от сетевой обработки файлов и до больших, сложных систем. Многие используют Perl как хорошую замену скриптам интерпретатора командной строки. Кто-то использует его как высокоуровневую замену для того, что пришлось бы делать на языках низкого уровня вроде C или C++. Не обязательно, что с вами дела будут обстоять так же (и с вашим руководством).
Если имеется библиотека, предоставляющая прикладной интерфейс, любой ее компонент можно сделать функцией или переменной Perl, используя расширения Perl на C или C++, динамически связанные с основным интерпретатором perl. Можете пойти от обратного и написать основную программу на C или C++, а потом подключить на лету некоторый код Perl, чтобы создать мощное приложение. См. perlembed.
Как уже говорилось, всегда будут небольшие специализированные языки, направленные на конкретную область задач и более пригодные для нее. Perl пытается служить кому угодно для чего угодно, но ни для чего-либо конкретного кому-либо конкретному. Типичные примеры специализированных языков — Prolog и Matlab.

Когда не стоит программировать на Perl?

Если запрещает начальство; но тогда подумайте о его смене :-).
На деле, хороший повод не программировать на Perl — это если у вас уже есть приложение на другом языке, сделанное хорошо и до конца, либо имеется прикладной язык, разработанный для конкретной задачи (допустим, Prolog или Make).
По ряду причин, Perl может не очень хорошо подходить для встроенных систем реального времени, низкоуровневой работы с операционной системой вроде написания драйверов или переключения контекста, сложных многопоточных приложений с разделяемой памятью, а также очень больших приложений. Заметьте, что сам perl не написан на Perl.
Perl принципиально остается динамически, а не статически типизированным языком. Никто вас, конечно, не осудит, если вы не станете писать на нем код по управлению ядерной техникой или операциями на головном мозге.

Какая разница между «perl» и «Perl»?

Один бит. Или вы не про ASCII? :-) Ларри сейчас пишет «Perl», чтобы разделять язык и конкретную его реализацию «perl» — то есть, текущий интерпретатор. Поэтому Том шутит: «Ничто, кроме perl, не может парсить Perl».
До выхода первого издания «Programming perl» язык часто называли «perl», и это попало в заглавие, потому что оно относится к интерпретатору. В самой книге Рэндал Шварц писал называние языка с большой буквы, чтобы оно лучше выделялось в тексте. Это соглашение было принято сообществом, и второе издание уже стало «Programming Perl» — слово с заглавной буквы теперь касалось языка.
Вы можете сами решать, использовать ли это правило. Например, для единообразия лучше писать «awk и perl», «Python и Perl», а не «awk и Perl», «Python и perl». Но никогда не пишите «PERL», потому что это не сокращение (сомнительные шутки и поздние расшифровки не в счет).

Это программа на Perl или скрипт на Perl?

Вообще, Ларри всё равно. По-английски «script» — это еще и сценарий, поэтому Ларри говорит (отчасти в шутку): «Скрипт вы даете актерам, программу — публике».
Изначально скриптом называлась заранее подготовленная последовательность команд, которые обычно должны быть интерактивными — то есть, запись разговора (chat script). Нечто вроде скрипта «разговора» по UUCP или PPP, либо программы expect; также скрипты, считываемые при запуске программы, такие как .cshrcили .ircrc. Это были просто вспомогательные элементы существующих программ, не самостоятельные программы.
Специалисты в компьютерной науке верно отметят, что все программы интерпретируются — вопрос в том, на каком уровне. Но если вы зададите подобный вопрос кому-то еще, то вам скажут, что программаединожды компилируется в машинный код, а потом много раз запускается, а скрипт — транслируется программой всякий раз, когда используется.
Сейчас термины «скрипт» и «скриптование» были захвачены недобросовестными или незнающими коммерсантами для своих гнусных целей, и они стали принимать странные и уничижительные оттенки вроде «несерьезные» или «ненастоящее программирование». Поэтому некоторые программисты на Perl предпочитают не использовать ни один термин, ни другой.

Что такое JAPH?

(Отвечает Брайан Д. Фой)
JAPH — аббревиатура от фразы «Just another Perl hacker», которой, начиная с конца 80-х, Рэндал Шварц подписывал сообщения электронной почты и USENET. До этого он использовал конструкцию «Just another x hacker» для многих других вещей, поэтому, дабы выделить JAPH, он стал оформлять подпись как программу на Perl:
print "Just another Perl hacker, ";
(Запятая и пробел в конце позволяли добавлять JAxH для его других многочисленных интересов.)
Другие люди переняли это и стали писать умные или запутанные программы с тем же выводом, сбивающие с толку, хотя и приносящие часы развлечений своим создателям и читателям.
В CPAN есть несколько программ JAPH: http://cpan.org/misc/japh.

Где можно найти сборник шуток Ларри Уолла?

(Отвечает Брайан Д. Фой)
Гуглите «Larry Wall quotes»! Можете даже попробовать кнопку «Мне повезет» :-)
В Wikiquote есть шутки Ларри с указанием источников, включая сообщения в USENET и комментарии к исходникам.
Если хотите простой текстовый файл, смотрите http://cpan.org/misc/lwall-quotes.txt.gz.

Как мне убедить других использовать Perl?

(Отвечает Брайан Д. Фой)
Обратитесь их собственному интересу! Если Perl для них новый (и поэтому пугающий) — найдите какие-нибудь их задачи, которые может решить Perl; Perl может сохранить им что-то — время, деньги, свежую голову, — либо что-то дать — гибкость, силу, возможность передать код последователям.
В целом, польза от языка сильно связана с умениями программистов. Хорошо, если вы или ваша команда сможете быть быстрее, лучше, сильнее с помощью Perl. Помните, что люди лучше воспринимают конкретную выгоду. Если вы столкнетесь с сопротивлением, посмотрите, что именно люди хотят от других языков, и как это можно сделать на Perl.
Вам не нужно заботиться о поиске или покупке Perl; он доступен бесплатно и прилагается к ряду популярных операционных систем. Поддержка сообщества в местах вроде PerlMonks или в многочисленных списках рассылки позволит вам получить ответы на свои вопросы.
Наконец, помните, что Perl не должен быть подходящим средством для любой задачи. Вы лучше продвигаете язык, если ваши запросы уместны и опираются на реальность. Слепое отстаивание чего бы то ни было приводит к тому, что люди не придают вашим словам значения. Будьте честными в отношении возможных отрицательных сторон выбора Perl — любой выбор связан с компромиссом.
Могут пригодиться эти ссылки:
http://perltraining.com.au/whyperl.html
http://www.perl.org/advocacy/whyperl.html

No comments:

Post a Comment