Изучаем Perl. Быстрый старт в Perl

Я слышал, что Perl - устаревший язык и сейчас на нем никто не пишет. Так ли это?
Нет, не так. Perl используется системными администраторами (или просто продвинутыми пользователями) для автоматизации рутинной работы. Perl используется для создания веб-сайтов. Также на нем создаются обычные приложения, как и на любом другом языке программирования.

Относительно возраста языка - Perl был создан в 1986 году и с тех пор активно развивался и изменялся. В настоящее время Perl поддерживает модульное и объектно-ориентированное программирование, регулярные выражения и т.д. - в общем, идет в ногу со временем.

Объявления о имеющейся вакансии Perl-программиста появляются с большой частотой, при этом уровень заработной платы, как правило, ощутимо выше, чем у программистов на Си или Java. Впрочем, к моменту, когда вы будете читать эти строки, ситуация могла и измениться, так что лучше проведите собственное исследование в этом направлении, посетив, к примеру, rabota.ru.

Чем хорош Perl?
Я бы выделил следующие преимущества Perl перед другими языками программирования:

  • Программы, написанные на Perl (как и в случае с любым другим скриптовым языком), одинаково хорошо работают под разными операционными системами.
  • Зачастую то, что на другом языке программирования (например, PHP) занимает десять строк кода может быть написано на Perl в одну строчку.
  • Если перед вами стоит какая-то задача, загляните в CPAN. Скорее всего, кто-то уже решил ее. Вам остается лишь скачать модуль и прочитать документацию к нему.

Я слышал, что синтаксис Perl неописуемо сложен. Так ли это?
Синтаксис Perl очень похож на синтаксис Java или PHP. Те же циклы, те же условные операторы и фигурные скобочки. Репутацию языка со сложным синтаксисом Perl совершенно незаслуженно получил за имеющиеся в нем операторы, которые, как уже отмечалось, позволяют писать более короткий код. Скажем, вы можете объявить массив слов так:

My @arr = ("aaa", "bbb", "ccc");

Или более простым способом - без запятых и кавычек:

My @arr = qw/aaa bbb ccc/;

Если вас интересуют конкретные примеры, в которых код на Perl оказывается короче, чем на каком-нибудь PHP, я позволю себе отослать вас к моему блогу, а точнее - к записи . Особое внимание обратите на операторы grep и sort, подумайте, сколько кода занял бы аналогичный код на PHP.

С чего начать изучение Perl?
Лично я учился на примерах. Вообще считаю этот способ самым простым и понятным. Вы можете без труда найти их в Google или в уже упомянутом моем блоге - в нем я часто выкладываю скрипты с комментариями.

Тем не менее могу порекомендовать несколько хороших книг - это «Изучаем Perl» и «Perl: изучаем глубже», авторы - Шварц Р. и Феникс Т. Недавно эти книги были переизданы, так что в них вы найдете самый легкую для усвоения и актуальную информацию о программировании на Perl. Настоятельно не рекомендую брать какие-либо другие книги, поскольку написанное в них зачастую уже давно потеряло актуальность (если книжка, скажем 2006-го года - помните, что Perl активно развивается) или в ней написано 1000 страниц ни о чем.

Если у вас возникнут вопросы относительно программирования на Perl, вы можете попросить совета на программерских форумах (например, vingrad.ru) или в жж-сообществе ru_perl.

Я не хочу устанавливать UNIX только ради этого вашего Perl!
И не надо - Perl портирован под Windows. Соответствующий проект называется ActivePerl. Просто скачайте и установите ActivePerl с http://www.activestate.com/activeperl/ и пользуйтесь на здоровье. Никаких кряков и кейгенов искать не нужно - программа бесплатная.

Уж больно все хорошо и замечательно. А как же ложка дегтя?
Да, пожалуй она имеется, и даже не одна.

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

Во-вторых, Perl подходит не для всяких задач. Если от вас требуется написать программу, которая должна работать быстро (графический редактор, 3D игру), Perl вам не подойдет. Как и любой другой скриптовый язык. Аналогично я не стал бы писать на Perl драйверы.

В-третьих, хоть Perl на мой взгляд и не сложен в изучении, но оно, это самое изучение, занимает больше времени, чем в случае с другим языком. Для сравнения, PHP я освоил буквально за пару ночей - переменные, циклы, классы - тут знать то нечего. Начать писать на Perl можно за тот же промежуток времени, но чтобы хорошо в нем разобраться, мне лично потребовалось несколько месяцев.

А минус за ненависть к PHP не желаете?
PHP имеет свои преимущества, многие из которых вытекают из простоты его синтаксиса. Простой синтаксис, значит прост в изучении. Прост в изучении, значит больше комьюнити.

Не стоит недооценивать PHP, ведь благодаря ему появились такие мощные CMS, как Drupal и Joomla. Аналогичных проектов на Perl мне не известно, если не считать аналога WordPress - Movable Type. Последний, к слову, пользуется большой популярностью за рубежом.

Update: я тут написал небольшой пост об основах программирования на Perl, может быть кому-нибудь пригодится.

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

Вы владеете какими-либо другими языками программирования? Если да, то изучение Perl будет для вас просто удовольствием. Если же нет, то не спешите, пробуйте все предлагаемые упражнения и примеры и не бойтесь экспериментировать!

Происхождение

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

Одна из причуд языка - его название. Оно имеет несколько определений. Первоначально Perl означал Practical Extraction Report Language (практический язык извлечений и отчетов). Однако, программисты очень часто называют его Phatologically Eclectic Rubbish Lister или даже Practically Everything Really Likable.

Давайте посвятим несколько минут тому, чтобы разобраться, что представляет собой Perl, и какие задачи возлагались на него во времена его создания. В далеком 1986 году Larry Wall работал над задачей генерирования отчетов из большого количества текстовых файлов, пересекающихся друг с другом. Будучи Unix-программистом, а также, потому что задача включала в себя манипулирование содержанием текстовых файлов, он первым делом попытался использовать Awk. Но вскоре стало ясно, что Awk для работы не подходит, и, не имея других кандидатов для решения поставленной задачи, оставалось только изобретать свой собственный инструмент, который можно было бы использовать и в будущем.

Вместо того чтобы впустую тратить время, Larry просто изобрел новый язык программирования и написал интерпретатор для него. Это похоже на парадокс, но это не совсем так, - то, что вы делаете - это всегда большой труд, но если вы сделаете это правильно, то этот труд обязательно окупится.

Вскоре Larry предложил свое детище сообществу читателей материалов телеконференций Usenet. Пользователи, имеющие доступ к Usenet, обеспечили создателю Perl эффективную "обратную поддержку", спрашивая, как делать одно, другое, третье. Многие из этих задач Larry даже и не собирался ставить перед своим маленьким новым языком программирования.

Новый язык программирования имел акцент на управление системой и обработку текста. После нескольких пересмотров он уже мог использовать регулярные выражения, сигналы, а также сетевые сокеты. Он стал известен как Perl и очень быстро сделался популярным в среде Unix-программистов, а вскоре и у всех нас.

Larry уже не сопровождает Perl в одиночку, но сохраняет свой эксклюзивный титул главного разработчика.

Perl-программы очень похожи на Си-программы, - возможно, потому что Perl был написан на Си, а, возможно, потому что Larry нашел удобными некоторые конструкции Си. Но Perl менее педантичный и гораздо более лаконичный, чем Си.

Perl призван помочь программисту в выполнении рутинных задач, которые для shell слишком трудны или плохо переносимы, а для Си (или любого другого языка) - слишком заумны или сложны в кодировании.

Когда вы освоите Perl, вы, возможно, обнаружите, что стали тратить заметно меньше времени на правильное заключение в кавычки различных параметров shell (или на корректное выполнение Си-объявлений), а больше - на чтение Usenet-новостей и катание с гор на лыжах, потому что Perl - замечательное средство для вашего совершенствования как программиста. "Кто-то из древних" сказал: "Не стОит изучать язык программирования, который радикально не меняет вашего представления о программировании". Будьте уверены - изучив Perl, вы посмотрите на программирование с совершенно иной точки зрения.

Мощные конструкции этого языка позволяют создавать с минимальной затратой сил очень эффективные решения и универсальные инструменты. Эти инструменты можно использовать и в дальнейшем, потому что написанные на Perl программы отличаются высокой переносимостью и готовностью к использованию. В результате у вас появится еще больше времени для чтения Usenet-новостей и посещения с друзьями баров.

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

Стоимость и лицензия

Perl свободен. Если быть более точным - Perl распространяется по открытой лицензии GNU (GNU Public License). Полный исходный код и документация абсолютно свободны для копирования, компилирования и печати. Все программы, написанные вами на Perl - ваши, и вы можете делать с ними все что захотите.

Помимо UNIX-компьютеров, Perl также существует для других платформ, - Windows, DOS, Atari, Amiga и.д.

Проинсталлирован ли у вас Perl?

Очень легко узнать, есть ли у вас Perl. Просто дайте в командной строке следующую команду:

perl -v This is perl, version 5.001
Unofficial patchlevel 1m.
Copyright 1987-1994, Larry Wall Win32 port Copyright 1995 Microsoft Corporation. All rights reserved.
Developed by hip communications iNC., //info.hip.com/info/
Perl for Win32 Build 107
Built Apr 16 1996@14:47:22
Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5.0 source kit.

Если же вы получили сообщение об ошибке или у вас Perl четвертой версии, то обратитесь к вашему системному администратору или же установите Perl сами.

Ваша первая программа на Perl

Ваша первая программа на Perl иллюстрирует вывод строки текста на экран. Для начала вы должны создать простой текстовый файл, в котором будет содержаться ваша Perl-программа. Затем вы запустите файл с вашей программой.

Создание программы

Perl-программа представляет из себя обычный текстовый файл, содержащий несколько конструкций языка. Последние обычно напоминают смесь из Си, Unix shell script и английского языка. В общем-то, именно так оно и есть на самом деле.

Perl-код может быть достаточно разнообразным. Вот несколько основных правил:

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

Конструкция языка должна заканчиваться точкой с запятой, за исключением случаев, когда данная конструкция является последней в блоке или файле, или это - оператор eval;

Пробелы, табуляция, пустые строки иррелевантны, - один пробел также хорош, как сто таких же пробелов. Это означает, что вы можете разбивать конструкцию языка на несколько строк для ясности. Строка - это обычно серия символов, заключенных в кавычки. Глава 2 "Числовые и строковые литералы" содержит более подробное описание строк;

Все что следует за символом "#" игнорируется, если только это не внутри какой-либо строки. Используйте эту возможность для обеспечения вашего кода полезными комментариями. Надо отметить, что многострочных комментариев (например, как в языке Си) в Perl нет.

Аналогично shell-скрипту, Perl-программа состоит из всех операторов Perl, имеющихся в файле и рассматриваемых в совокупности как одна большая программа, подлежащая выполнению. Понятия main-функции, как в Си, в Perl нет.

Одна из увлекательных вещей относительно Perl 6 заключается в умопомрачительной легкости, с которой происходит создание новых модулей/библиотек и добавление их в Perl 6 Ecosystem (аналог CPAN для Perl 6). Давайте разберемся, как создаются новые модули для Perl 6.

Разглядим в качестве примера модуль Sitemap::XML::Parser. Содержимое соответственного репозитория на GitHub последующее:

.
+-- lib
¦ L-- Sitemap
¦ L-- XML
¦ L-- Parser.pm6

META.info

README
L-- t
L-- main.t

Что содержит в себе модуль Perl 6:

Разумеется, возможно обойтись без тестов и тем паче без логотипа.

С кодом, полагаю, все более-менее ясно. Отмечу только-только при объявлении способов и функций очень лучше указывать типы аргументов. Тем вы окажете огромную услугу тому, кто будет воспользоваться вашим модулем.

Интерфейс модуля будет более понятным и допустить ошибку при его использовании станет сложнее.

Документация пишется на британском языке и хранится в тех же pm- либо pm6-файлах, что и код. Не думаю, что у вас возникнут трудности с форматом Perl 6 Pod, его до боли просто освоить по примерам. При написании документации обычно довольно указать короткое описание модуля, пример его использования и в одном-двух предложениях обрисовать каждую функцию (либо способ), доступную юзеру.

Испытания находятся в каталоге./t в файлах с расширением t. По сути это обыденные скрипты на Perl 6. Вот вам наглядный пример простого автоматического теста, который в реальности ничего не инспектирует:

Use v6;
use lib "lib";
use Test;


ok(1);

Для прогона тестов используйте команду:

Prove -e perl6 ./t

Главные модули, которые пригодятся для вас при написании тестов - это Test и Test::Mock. Как нетрудно додуматься, 1-ый предназначен фактически для написания тестов, а 2-ой - для сотворения mock-объектов. Примеры использования обоих модулей можно поглядеть тут.

См также выборку ссылок в конце заметки.

Примечание: На всякий случай обращаю ваше внимание, что испытания не должны писаться в предположении, что у юзера на localhost поднят Memcached либо типа того. По мере надобности используйте mock-объекты и помните, что вы пишите модульные (и время от времени интеграционные) испытания, которые не должны зависеть от подобного рода вещей. Как указывает практика, для неких программистов это не разумеется.

В файле META.info содержится имя, версия и короткое описание модуля, также перечень зависимостей, тип и адресок репозитория. Формат файла представляет собой обыденный JSON:

{
"name" : "Sitemap::XML::Parser",
"version" : "*",
"description" : "A Perl 6 module for parsing sitemap.xml files",

"depends" : [
"LWP::Simple",
"XML::Parser::Tiny",

"DateTime::Format::W3CDTF"
],
"source-type" : "git",
"source-url" : "git://github.com/afiskon/p6-sitemap-xml-parser.git"
}

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

Perl6 --doc ./lib/Sitemap/XML/Parser.pm6 > ./README

Используя этот подход, для вас не придется волнуется о том, как поддерживать файл README в животрепещущем состоянии.

Что касается логотипа модуля, лично я считаю эту идею полнейшим бредом. Но если для вас очень охото, чтоб у вашего модуля был логотип, сможете поглядеть, к примеру, как это изготовлено в модуле JSON::Tiny.

Итак, вы сделали некоторый нужный модуль, написали к нему документацию и как надо покрыли его тестами. Что требуется для того, чтоб другие программеры могли установить его при помощи panda?

Для этого делаем форк репозитория https://github.com/perl6/ecosystem/, добавляем в конце файла META.list ссылку на файл META.info в собственном репозитории и шлем pull request. GitHub позволяет сделать все это в пару кликов прямо через веб-интерфейс.

По моему опыту конфигурации принимают достаточно стремительно, обычно в течение часа либо около того. Спустя еще какое-то время ваш модуль появится в файле http://feather.perl6.nl:3000/projects.json. Конкретно этот файл употребляется panda для получения полного перечня всех имеющихся модулей для Perl 6. Пробуем установить модуль:

Panda update
panda install Sitemap::XML::Parser

Проверяем, что испытания проходят, документация просматривается через p6doc и т.д.. Спустя еще какое-то время ссылка на ваш модуль появится на modules.perl6.org. Если вы написали что-то полезное, новые тикеты в багтрекере, форки и pull request’ы не принудят себя длительно ожидать.

Так как все модули Perl 6, как и вообщем все, связанное с Perl 6, хранятся в git-репозиториях на GitHub (хотя, как я понимаю, можно использовать не только лишь GitHub и не только лишь Git), вы сможете без усилий сделать лучше хоть какой из их - поправить ошибку, дописать документацию и тп. Либо, скажем, просто использовать их в качестве обучающих примеров.

Появился в 1987 году.

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

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

Perl - это единственный язык, программы на котором выглядят одинаково до и после RSA-шифрования.

На момент написания этого материала актуальной версией интерпретатора является 5.22.0 . Perl 6 готовится к релизу в 2015 году, но еще недостаточно документирован.

Язык программирования Perl крайне не рекомендуется брать в качестве языка для знакомства с программированием. Если вы абсолютный новичок - лучше начните с чего-нибудь менее губительного для вашего неокрепшего сознания. Серьезно, вот что говорил об этом языке Йон Риббенс:

PHP - это маленькое зло, созданное некомпетентными новичками, в то время как Perl - это большое и коварное зло, созданное умелыми, но извращёнными профессионалами.

К слову сказать, с PHP начинать тоже не стоит. А теперь ближе к делу.

Среда исполнения

На данный момент Perl официально поддерживается тремя ведущими платформами: Mac OS X, Unix и Windows. На первых двух из них среда исполнения Perl является предустановленной, и ее версию можно узнать через команду perl -v (свежую версию можно скачать ), а для операционных систем семейства Windows интерпретатор Perl доступен для скачивания на этой странице . Рекомендуется выбирать ActivePerl (дистрибутив от ActiveState) как самый распространенный.

Интегрированная среда разработки (IDE)

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

Padre, the Perl IDE

Мультиплатформенная легковесная среда разработки, созданная специально для Perl и удобная для новичков. Помимо традиционных подсветки синтаксиса и автодополнения, имеет также встроенные инструменты рефакторинга. Кстати, Padre сама написана на Perl 5.

Текстовые редакторы

Как и в случае с любым языком программирования, конечно же, вам предоставляется огромное множество мультиплатформенных текстовых редакторов на выбор: от предустановленных блокнотов до более удобных средств редактирования исходного кода с подсветкой синтаксиса, автодополнением и т.п. В частности, обратите внимание на:

  • KomodoEdit - урезанная версия коммерческой среды разработки Komodo IDE, разрабатываемая ActiveState (той самой, которая поддерживает дистрибутив ActivePerl), располагает функциями автодополнения, подсветки синтаксиса, множественных курсоров и подсказок из документации;
  • Vim - текстовый редактор, интерфейс которого может оказаться непривычным для Windows-пользователя; поддерживает подсветку синтаксиса;
  • Sublime Text - один из самых инструментов редактирования исходного кода с подсветкой синтаксиса, автодополнением и т.п., функционал которого расширяется множеством существующих плагинов;
  • Notepad++ - легковесный текстовый редактор, отличающийся наиболее корректной, после KomodoEdit, подсветкой синтаксиса; функционал может быть расширен плагинами, однако специально для Perl их существует довольно мало.

CodeGround

Кроме того, если вы хотите только попробовать программирование на Perl и не хотите устанавливать дополнительное программное обеспечение на свой компьютер, вы можете воспользоваться сервисом CodeGround , предоставляющим доступ к онлайн-средам разработки с базовым функционалом для большинства языков программирования, в число которых входит и Perl.

Первый «Привет, мир!» на Perl

Традиционно предлагаем начать знакомство с новым языком со всем хорошо известной программы:

Print "Hello World\n";

Сохраните эту строку в файле hello.pl и запустите только что созданную вами программу командой:

Perl hello.pl

Однако прежде убедитесь, что исполняемые файлы Perl есть среди ваших переменных среды (переменных окружения), а также в том, что вы вызывается perl из папки с исходным файлом hello.pl . В случае успеха, вы увидите ожидаемое «Hello, world!»

Поздравляем, вы начали писать на Perl!

А дальше - в путь …

Отличное англоязычное руководство по языку программирования Perl для быстрого старта вы можете найти на сайте tutorialspoint.com . Помимо этого, существует официальный обучающий ресурс -

Если программа должным образом работает при вызове ее из командной строки, необходимо инсталлировать ее на компьютере-сервере. Приемлемые места размещения зависят от сервера, хотя для CGI-сценариев часто исполь-зуется каталог

/usr/etc/httpd/cgi-bin/ и его подкаталоги. Обсудите зтот вопрос с Web-мастером или системным администратором.

После завершення инсталляции вашей программы в CGI-каталоге ее можно выполнять, указывая броузеру ее путевое имя в составе

URL. Напри-мер, если ваша программа называется howdy, URL будет выглядеть так:

http://vww.SOMEWHERE.org/cgi-bin/howdy.

Сервери обычно позволяют использовать вместо ддинных путевых имен псевдонимы. Сервер, имеющий адрес

www.SOMEWHERE.org, может запросто перевести cgi-bin/howdy, содержащийся в зтом URL, в нечто вроде usr/etc/httpd/ cgi-bin/howdy. Ваш системний администратор или Web-мастер может подска-зать, какой псевдоним следует использовать при обращении к вашей программе. Зтот заголовок необходим для протокола HTTP, о котором мы упоминали выше.

Передача параметров через

CGI

Для передачи параметров в CGI-программы (точнее, в большинство CGI-программ) никакие формы не нужны. Чтобы убедиться в этом, замените

URL на http://www.SOMEWHERE.org/cgi-bin/ice_creain?flavor=mint.

Когда вы "нацеливаете" свой броузер на этот

URL, броузер не только просит Web-сервер вызвать программу ice_cream, но и передает в нее строку flavor=mint. Теперь дело программы - прочитать данную строку-аргумент и разобрать ее. Эта задача не так проста, как кажется. Многие программы пытаются решить ее и разобрать запрос самостоятельно, но большинство "самодельных" алгоритмов время от времени отказывают. Учитывая то, насколько сложно найти правильное решение такой задачи для всех возможных случаев, вам, наверное, не следует писать код самим, особенно при наличии отличных готовых модулей, которые выполняют этот хитрый синтаксический анализ за вас.

К вашим услугам

- модуль CGI.pm, который всегда разбирает входящий CGI-запрос правильно. Чтобы вставить этот модуль в свою программу, просто напишите

где-нибудь в начале программы*.

Оператор

use похож на оператор # include языка С тем, что в процессе компиляции извлекает код из другого файла. Но он допускает также использование необязательных аргументов, показывающих, к каким функциям и переменным из этого модуля вы хотели бы обращаться. Поместите их в список, следующий за именем модуля в операторе use,- и вы сможете обращаться к указанным функциям и переменным так, как будто они ваши собственные.

В данном случае все, что нам нужно использовать из модуля

CGI.pm - это функция param () **.

Если аргументы не указаны, функция

param () возвращает список всех полей, имевшихся в HTML-форме, на которую отвечает данный CGI-сце-нарий. (В текущем примере это поле flavor, а в общем случае - список всех имен, содержащихся в строках имя=значение переданной формы.) Если указан аргумент, обозначающий поле, то param () возвращает значение (или значения), связанные с этим полем. Следовательно, param (" flavor") возвращает "mint", потому что в конце URL мы передали ?flavor=mint. Имена всех Perl-модулей имеют расширение рт. Более того, оператор use подразумевает это расширение. О том, как создавать свои собственные модули, вы можете узнать в главе 5 книги Programming Perl или на man-странице perlmod(l). Некоторые модули автоматически экспортируют все свои функции, но, поскольку CGI.pm - это на самом деле объектный модуль, замаскированный под обычный, мы должны запрашивать его функции явно.

Несмотря на то что в нашем списке для оператора

use имеется всего один элемент, мы будем использовать запись qw (). Благодаря этому нам будет легче впоследствии раскрыть этот список.

#!/usr/local/bin/perlS -w

# программа ответа на форму о любимом сорте мороженого (версия

1) use CGI qw(param);

print “END_of_Start;

Content-type: text/html

Hello World

Greetings, Terrans! END_of_Start

print "

Your favorite flavor is $favorite. print “All_Done;

All Done

Как сократить объем вводимого текста

Вводить все равно приходится очень много, но в

CGI.pm есть множество удобных функций, упрощающих набор. Каждая из этих функций возвращает строковое значение, которое вы будете выводить. Например, header () возвращает строковое значение, содержащее строку Content-type с последующей пустой строкой, start_html (строка ) возвращает указанную строку как HTML-титул (название документа), hi (строка) возвращает указанную строку как HTML-заголовок первого уровня, а р (строка) возвращает указанную строку как новый HTML-абзац.

Мы могли бы перечислить все эти функции в списке, прилагаемом к оператору

use, но такой список разросся бы до небывалых размеров. В CGI.pm, как и во многих других модулях, имеются так называемые директивы импорта - метки, которые обозначают группы импортируемых функций. Вам нужно лишь поставить желаемые директивы (каждая из которых начинается двоеточием) в начале своего списка импорта. В модуле CGI.pm имеются такие директивы:

Импортировать все методы обработки аргументов, например

param ().

Импортировать все методы создания заполняемых форм, например

text-field().

Импортировать все методы, которые генерируют стандартные элементы

HTML 2.0.

Импортировать все методы, которые генерируют элементы, предложенные в

HTML 3.0 (такие как , и ).

Импортировать все методы, которые генерируют расширения

HTML, характерные для Netscape.

Импортировать все сокращения, генерируемые

HTML (т.е. "html2" + "html3" + "netscape").

Импортировать "стандартные" возможности:

"html2", "form" и "cgi".

Импортировать все имеющиеся методы. Полный список приведен в модуле

CGI.pm, где определяется переменная %tags.

Мы будем использовать только директиву

: standard. (Подробная информация об импортировании функций и переменных из модулей приведена в главе 7 книги Programming Perl, а также на man-странице Exporter 3).}

Вот как выглядит наша программа со всеми сокращениями, которые используются в

CGI.pm:

#!/usr/local/bin/perlS -w

# cgi-bin/ice_cream #

программа ответа на форму о любимом сорте мороженого (версия 2) use CGI qw(:standard);

print header() ;

print start_html("Hello World"), hi ("Hello World");

my $favorite = param("flavor");

print p("Your favorite flavor is $favorite.");

print end_html();

Видите, насколько это проще? Вам не нужно беспокоиться о декодировании данных формы, о заголовках и HTML-тексте, если вы этого не хотите.

Генерирование формы

Если вам надоело вводить параметры своей программы в броузер

- создайте заполняемую форму. К таким формам привыкли большинство пользователей. Компоненты формы, которые принимают вводимые пользователем данные, иногда называются vidgets; считается, что этот термин гораздо удобнее, чем "устройства графического ввода". Такие компоненты форм включают одно- и многостроковые текстовые поля, всплывающие меню, прокручиваемые списки, различные виды кнопок и отмечаемых блоков.

Создайте следующую HTML-страницу, которая включает форму с одним компонентом "текстовое поле" и кнопкой передачи. Когда пользователь щелкает на кнопке передачи*, вызывается сценарий

ice_cream, заданный атрибутом ACTION.