Тарифы Услуги Сим-карты

Перл (язык программирования). Вызов внешних программ из скрипта на языке perl. Форматированный вывод данных функцией printf

Не слишком красивое, но очень выносливое животное, способное выполнять тяжёлую работу.

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

Perl также знаменит огромной коллекцией дополнительных модулей http://www.cpan.org(англ.)

Интересен текст на Perl, печатающий простые числа :

Perl -wle "(1 x $_) !~ /^(11+)\1+$/ && print while ++ $_"

Еще один также впечатляющий своей краткостью пример, имеющий к тому же практическую пользу. Печатаются только уникальные строки файла file.

Perl -ne "$s{$_}++ || print" file

В этих примерах Perl напоминает своей краткостью и непонятностью с первого взгляда язык .

Перл унаследовал много свойств от языков Си , shell script , awk .

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

Perl - далеко не единственный язык, дающий богатые возможности в обработке текста. Языки программирования РЕФАЛ , Icon и Снобол предоставляют возможность использовать более полно метод программирования «сопоставления с образцом», частным случаем которого и являются регулярные выражения.

Существует также полноценный

Синтаксис языка Perl

Синтаксис Perl имеет много общего с синтаксисом языков Си , Awk , shell.

Первая строка исходного кода может начинаться с «#!/Путь/к/Perl [-ключи]» - что указывает системе путь к интерпретатору Perl для выполнения программы в UNIX системах и выполнения их на веб-сервере .

Пример программы

Print 1 , 0 x 100 ;

Типы данных

Основные типы данных: скаляр, массив, хеш-таблица , функция, файловый дескриптор . Переменные разных типов отличаются знаком, который стоит перед именем переменной.

$foo ; # скаляр или указатель @foo ; # массив %foo ; # хеш-таблица &foo; # функция FOO; # дескриптор ввода-вывода

  • Скалярные переменные используются для хранения одиночных значений. Они могут содержать числа, строки и ссылки на другие объекты . Перед именем скалярной переменной необходимо ставить знак доллара "$". Тип скалярной переменной не фиксирован (в отличие от, например, языка Си) и определяется динамически в зависимости от контекста. Например,

$x = 10 ; # число $y = $x + 1 ; # используем $x как число… $z = $x . "string" ; # … а теперь - как строку $ref = \$x ; # $ref является указателем на $x $$ref = 0 ; # $x содержит значение 0

  • Массив является упорядоченным списком скаляров. Каждый элемент массива имеет порядковый индекс, с помощью которого к нему можно получить доступ. Нумерация элементов начинается с нуля, то есть первый элемент списка имеет индекс 0. Перед именем переменной-массива необходимо ставить знак "@", а для доступа к определенному элементу массива рекомендуется ставить знак "$", так как определенный элемент массива является скаляром. Многомерные массивы можно смоделировать, помещая в список ссылки на другие списки.

@array = (1 ,2 ,3 ,4 ) ; # записали в массив @array четыре элемента print $array [ 2 ] ; # напечатать третий элемент print @array [ 2 ] ; # также напечатать третий элемент, но рекомендуется использовать предыдущую версию print @array [ 2 ,3 ] ; # напечатать третий и четвертый элемент

  • Хеш-таблица представляет собой ассоциативный массив , позволяющий ассоциировать строку (называемую ключ) со скаляром (значение). Строка называется ключом, а скаляр в хеш-таблице значением. Перед именем переменной-списка необходимо ставить знак процента "%", а для доступа к определенному элементу массива рекомендуется ставить знак "$".

Физически Хеш-таблица представляет собой массив, где в нечетных позициях находятся ключи, а на четных - значения.

%hash = ( "cat" => "kitten" , "dog" => "puppy" , "cow" => "calf" ) ; print $hash { "cat" } ; #Напечатает kitten print %hash { "cat" } ; #Также напечатает kitten, но рекомендуется использовать предыдущую версию print join ("-" , keys %hash ) ; # Вывод всех ключей. Напечатает cat-dog-cow print join ("-" , values %hash ) ; # Вывод всех значений. Напечатает kitten-puppy-calf print join ("-" , %hash ) ; #Напечатает cat-kitten-cow-calf-dog-puppy

  • Функция представляет собой фрагмент исполняемого кода. Функция всегда возвращает какое-либо значение либо UNDEF. Если возвращаемое значение явно не указано оператором return, возвращается последнее вычисленное значение.

Sub printTwo{ print 2 ; } sub three{ 3 ; } $s = \&three; print &$s ; #Напечатает 3 $s = \&printTwo; print &$s ; #Напечатает 21. `2` в коде функции, а `1` как значение, возвращаемое функцией printTwo print &printTwo #То же самое

  • Константа

Константа представляет собой неизменяемое значение. Константа не является встроенным типом языка и эмулируется при помощи функций. Использование:

Use constant MY => 2 ; print MY;

*MY = \2 ; print $MY ;

  • Файловый дескриптор

Представляет собой указатель на файл, устройство или PIPE канал, открытые для записи, чтения или для записи и чтения

Использование:

$s = ; #Читаем одну строку из дескриптора STDIN (стандартный поток ввода); скалярный контекст. @values = ; #Читаем все строчки из некоторого открытого и связанного с дескриптором FILE файла; списковый контекст. print STDOUT $s ; #Печатаем в STDOUT (стандартный поток вывода)

Регулярные выражения

В Perl встроена мощная поддержка регулярных выражений . Благодаря этому Perl очень эффективен для обработки текстов. Бо́льшая часть работы с регулярными выражениями производится при помощи операторов =~ , m// и s/// .

Оператор m// используется для проверки на совпадение. В простейшем случае результат выражения $x =~ m/abc/ будет истинным, если и только если строка $x будет соответствовать регулярному выражению abc . Например:

Поиск и замена выполняются при помощи оператора s/// . Конструкция $x =~ s/abc/def/; заменит первое вхождение регулярного выражения abc на строку def .

Пример Значение
$x =~ s/abc/def/g; Все вхождения (на что указывает флаг /g - global) подстроки «abc» в $x будут заменены на «def».
$x =~ s/a(.{1,3})c/!$1!/; Первое вхождение в $x буквы «a», затем от одного до трех любых символов, и затем буквы «c» будет заменено на эти символы между «a» и «c», окружённые «!». Например, «syntactic» станет «synt!cti!».
$x =~ s{^p(erl|ugs)}{"P" . lc $1}ieg; Здесь показан пример использования модификатора /e , указывающего на то, что вместо строки замены будет написан код, результат выполнения которого надо использовать. Все вхождения «perl» или «pugs» в любом регистре будут заменены на «Perl» и «Pugs», соответственно.

Поэзия в Perl

На Perl можно даже писать стихотворения. Одно из таких стихотворений под названием «Black Perl» («Чёрная жемчужина» или «Чёрный перл») было упомянуто Ларри Уоллом в первоапрельском письме в

BEFOREHEAD: close door, each window & exit ; wait until time . open spellbook, study , read (scan, select , tell us) ; write it, print the hex whole each watches, reverse its length , write again; kill spiders, pop them, chop , split , kill them. unlink arms, shift , wait & listen (listening, wait ) , sort the flock (then , warn the "goats" & kill the "sheep" ) ; kill them, dump qualms, shift moralities, values aside, each one; die sheep! die to reverse the system you accept (reject, respect) ; next step, kill next sacrifice, each sacrifice, wait , redo ritual until "all the spirits are pleased" ; do it ("as they say" ) . do it(*everyone***must***participate***in***forbidden**s *e*x*) . return last victim; package body; exit crypt (time , times & "half a time" ) & close it, select (quickly) & warn your next victim; AFTERWORDS: tell nobody, wait , wait until time ; wait until next year, next decade; sleep , sleep , die yourself, die at last

Редакторы

  • ActiveState Komodo
  • EPIC - Perl Editor and IDE for Eclipse

См. также

  • Сравнение возможностей Perl с другими языками см. в статье Сравнение языков программирования
  • Parrot

Ссылки

  • www.perl.org - Официальный сайт языка Perl
  • www.cpan.org - Архив библиотек для языка Perl
  • www.activestate.com/Products/activeperl дистрибутив Perl от ActiveState
  • perl6.ru - информация о новой версии Perl 6
  • forum.vingrad.ru/Perl-forum.html - русскоязычный форум о Perl на Vingrad
  • ru_perl - русскоязычное комьюнити в ЖЖ
  • kiev.pm - Активное комьюнити разработчиков на Perl
  • brainworker.ru - поиск по сайтам о Perl
  • Критический анализ языка PERL - детальный анализ и критика основных языковых средств Perl с точки зрения статических языков. Несколько устаревшая статья.

Документация

  • perlintro - краткое введение и обзор Perl’а
  • perlsyn - синтакс Perl’а
  • perlre - регулярные выражения в Perl
  • perlfaq - ответы на часто задаваемые вопросы по Perl (также см. русский перевод)

Видео

  • YAPC::TV - видеозаписи с Perl-мероприятий

Обучение

  • Perl 6 Tutorial - видеозаписи серии докладов, сделанных на украинском воркшопе «Perl Mova» 23 февраля 2008 года.

Сообщества

В России

  • Moscow.pm (Москва)
  • Vladivostok.pm (Владивосток)
  • Kazan.pm (Казань)
  • RostovOnDon.pm (Ростов-на-Дону)
  • SPb.pm (Санкт-Петербург)

На Украине

  • Kiev.pm (Киев)
  • Odessa.pm (Одесса)

В Белоруссии

  • Minsk.pm (Минск)

Литература

  • Рэндал Л. Шварц, Брайан Д. Фой и Том Феникс Perl: изучаем глубже . - O"Reilly, "Символ", 2007. - ISBN 978-5-93286-093-9
  • Пол Уайтхэд Perl: наглядный курс программирования = Perl: Your Visual Blueprint for Building Perl Scripts. - М.: «Диалектика» , 2001. - С. 280. - ISBN 0-7645-3478-5
  • Линкольн Д. Штайн, Разработка сетевых программ на Perl : Пер. с англ. - М. : 2001. - 752 стр. с ил., Издательство «Вильямс» .

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

Perl был создан в 1986 году как инструмент для администрирования и конфигурирования системных ресурсов сети, состоящей из Unix-компьютеров. Он сочетает в себе лучшие чертыC,shell,sedиawk, поэтому для тех, кто знаком с ними, изучение Perl-а не представляет особого труда. Cинтаксис выражений Perl-а близок к синтаксисуC. В отличие от большинства утилит ОСUNIXPerl не ставит ограничений на объем обрабатываемых данных и если хватает ресурсов, то весь файл обрабатывается как одна строка. Рекурсия может быть произвольной глубины. Хотя Perl приспособлен для сканирования текстовых файлов, он может обрабатывать так же двоичные данные и создавать.dbm файлы, подобные ассоциативным массивам. Perl позволяет использовать регулярные выражения, создавать объекты, вставлять в программу наСилиC++куски кода на Perl-е, а также позволяет осуществлять доступ к базам данных.

Язык Perl был создан для повышения эффективности обработки текстовых документов. Он ориентирован на обработку строк. В настоящее время язык получил большое распространение как инструмент создания исполняемых модулей WWW-сервера. Существующие пакеты расширения обеспечивают доступ к SQL-серверам непосредственно из Perl-программы. Это позволяет использовать его для решения всех задач, возникающих при обеспечении WWW-доступа к базам данных. Perl эффективен также при обработке произвольных структур данных: существующих отчетов, списков, карточек в электронном виде.

Хотя CGI-приложения можно писать практически на любом языке,PerlиCGI-программирование стали синонимами для многих програм­мистов. Как сказал Хасан Шрейдер (HassanShroeder), первый вебмастерSun, «Perl- это артерия Интернета».Perl- самый широко исполь­зуемый язык дляCGI-программирования, и для этого есть много веских причин:

Perlлегко выучить: его синтаксис напоминает другие языки (например С), потому что он «многое прощает», - при ошибке выда­ется подробное сообщение, помогающее быстро локализовать про­блему.

Perlспособствует быстрой разработке, так как это интерпретируе­мый язык; исходный код не надо компилировать перед запуском.

Perlдоступен на многих платформах с минимальными измене­ниями.

Perlсодержит очень мощные функции для обработки строк со встро­енной в язык поддержкой поиска и замены по регулярным выраже­ниям.

Perlобрабатывает двоичные данные так же легко, как и текст.

Perlне требует четкого разделения на типы: числа, строки и логичес­кие выражения являются обычными скалярами.

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

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

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

РНР изобретен Расмусом Лердорфом в конце 1994 года. Первая вер­сия выпущена в 1995 году под именем «Инструментарий Персональ­ных Домашних Страниц», затем она была переработана и названа PHP/FI Version 2 (FI - модуль обработки данных для форм). Так­же была добавлена поддержка баз данных mSQL. С этого момента в разработке стали принимать участие добровольцы.

Статистика используемости РНР приблизительна, но, согласно ис­следованию, проведенному Netcraft, в начале 2001 года РНР исполь­зовался на более чем 5 300 000 сайтах по всему миру. Для сравне­ния: в это время число IIS серверов было примерно таким же (5 млн). Разработка интерпретатора РНР приняла форму организованного командного процесса, ядро интерпретатора разрабатывает компания Zend.com. При этом РНР распространяется свободно: его последнюю версию можно загрузить с сайта PHP.net. Модули РНР поставляют­ся в комплекте с сервером Apache, в комплектах систем Linux.

Изначально аббревиатура РНР означалаPreprocessor of Home Pages - препроцессор домашних страниц . Это язык внедряемых в HTML-страницы сценариев, исполняемых на сервере. По большей части его синтаксис заимствован из таких языков, как С, Perl, Java, и при этом добавлена масса возможностей, которых этим языкам недостает. Про­ще говоря, синтаксис РНР - это разумная альтернатива и строго­сти С, и «беспредельности» Perl.

РНР наделен практически полным набором функциональности, о ко­торой (до появления РНР) мог только мечтать web-программист. Его цель - позволить максимально быстро создавать динамически гене­рируемые web-страницы. С полным основанием можно заявить, что изучение и использование РНР будет выгодно как начинающим, так и профессиональным программистам.

Основными конкурентами РНР являются технологии JSP (J ava Server Pages и Java Scriptlets), ASP (Active Server Pages), Perl, SSI (Server Side Includes), Cold Fusion Server Pages.

Рассмотрим те недостатки, которые присущи указанным технологиям. JSP - достаточно слож­ный для изучения и использования язык. ASP , основанный на син­таксисе VBScript (Visual Basic), имеет всего несколько десятков соб­ственных функций и поэтому вынужден использовать СОМ-объекты; кроме того, он ориентирован исключительно на работу под Windows. Perl - язык головоломный, и его вольности затрудняют его понима­ние. SSI позволяет всего лишь компоновать HTML-страницу из не­скольких файлов. CF - коммерческий продукт, что является его ос­новным недостатком.

Основные достоинства РНР :

    бесплатен; постоянно совершенству­ется; работает на UNIX и Windows платформах;

    допускает работу с большинством СУБД;

    имеет широкий набор функций (более 3 тыс.);

    допускает объектно-ориентированное программирование;

    способен использовать протоколы HTTP, FTP, ШАР, SNMP, NNTP, РОРЗ, net sockets и другие;

    позволяет выполнять все операции, что и пере­численные его конкуренты, и даже работать с файлами графики. Можно также запускать РНР-скрипты как интерпретируемые файлы и компилировать исполняемые приложения (в том числе с под­держкой графического интерфейса GTK).

Если вы обнаружите, что РНР не способен на что-то (или работает не так, как вам хотелось бы), никто не будет препятствовать вам вно­сить в исходный код РНР (написанный на С) желаемые изменения. РНР является программным продуктом с открытым исходным кодом, и внесение в него улучшений и дополнений путем создания собст­венных модулей расширения всегда приветствуется.

Сегодня мы предлагаем вам ознакомиться с одним из курсов Техносферы, который посвящён программированию на Perl. Этот курс открытый - на него может записаться любой студент или аспирант МГУ имени М.В. Ломоносова. Также в Техносфере есть еще несколько , 1 сентября на них открывается запись. В этом семестре вас ждет приятное дополнение: они будут подкреплены методическим материалом, который будет содержать достаточно информации, чтобы по нему можно было вспомнить материал любой лекции и при необходимости более глубоко её изучить.

Цель курса «Программирование на Perl» - узнать возможности языка (его сильные и слабые стороны), научиться писать программные продукты на этом языке, научится быстро ориентироваться в чужом коде. Под катом находятся все лекции в формате видео и краткое описание к ним.

Лекция 1. Введение

История создания языка Perl. Сравнение производительности. Примеры проектов. Документация (perldoc). Настройка окружения. Запуск скриптов (perlrun). Модуль Deparse. Модуль Data::Dumper. Модуль DDP. Отладка perl-скриптов (perldebug).

Лекция 2. Синтаксис и данные

Базовый синтаксис (условия, циклы, управляющие функции, постфиксная нотация). Переменные (основные типы, ссылки, интерполяция). Функции (декларирование, аргументы, контекст, прототипы, встроенные функции, grep/map/sort, eval). Операторы (порядок исполнения, особенные операторы, числа и строки).

Лекция 3. Модульность и повторное использование

Include. Блоки фаз. Package. Экспорт. Версии. Pragmatic modules. No. Symblo tables. CPAN.

Лекция 4. Регулярные выражения и юникод

Поддержка Unicode (определения, строки и октеты, преобразования, UTF8-flag, ввод/вывод). Регулярные выражения (сопоставление, поиск и замена, транслитерация, классы символов, модификаторы, группы, оглядывания, захваты, квантификаторы, работа с юникодом, отладка).

Лекция 5. Общение с внешним миром

Работа с файлами. Perl IO backend. Взаимодействие процессов. Работа с сокетами. Сериализация (преобразование данных в двоичный вид, JSON, CBOR, MSGPACK, Storable, XML). Разбор входных параметров.

Лекция 6. ООП

Методы. Примеры. Наследование. Method resolution order. Детали. Moose-like.

Лекция 7. Работа с базами данных

SQL. DBI. Connect. SQL-инъекции. Prepare, execute. Fetchrow. Fetchall_arrayref. Fetchall_hashref. Selectrow. Selectall. Ошибки. Транзации. Last_insert_id. DBIx::Class. Файлы. Resultset, result. Search. Find, single. Count. Relations. Join. Prefetch. Update, delete. Many_to_many. Storage. DBIx::Class::Schema::Loader. SQL::Translator. Memcached.

Лекция 8. Веб-приложения изнутри

Протокол HTTP. CGI, mod_perl, FastCGI, PSGI. Веб-фреймворки. Механизмы безопасности в приложениях.

Лекция 9. Асинхронно-событийное программирование

Работа операционной системы (параллелизм и псевдопараллелизм, состояние процесса и переключение контекста, степень многозадачности, системный вызов, блокирующие операции ввода-вывода). Обработка N параллельных соединений (accept + fork, C10k, неблокирующие операции ввода-вывода, событийный цикл). AnyEvent (замыкания, функции с отложенным результатом, интерфейс AnyEvent, Guard). Coro.

Лекция 10. Ускоряем Перл. Расширяем «С»

Генерация XS-модулей. Макропроцессор. Типы данных изнутри. Работа со стеком. Typemaps. Встраивание Perl (perlembed).

Лекция 11-12. Тестирование. Анализ производительности

Функциональное тестирование. Тестирование производительности. Нагрузочное тестирование. Юзабилити-тестирование. Тестирование интерфейса пользователя. Тестирование безопасности. Тестирование локализации. Тестирование совместимости. Профилирование. Бенчмарки. Поиск утечек в Pure Perl. Поиск утечек в XS.

Подписывайтесь на наш youtube-канал Технострим Mail.Ru ! Там вы найдете все лекции, мастер-классы и трансляции наших образовательных проектов.

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

Сразу нужно пояснить, для кого это все написано. Если Ваш сервер работает на платформе UNIX, то это я должен читать Вашу статью. У меня же установлен Windows NT workstation 4.0 (RUS) плюс Service Pack 3. Когда пришло время сделать из компьютера WEB-сервер, я было кинулся ко встроенным Службам узла WEB, но быстро понял, что это мне не нравится (почему?). И тут один добрый человек посоветовал поставить Xitami WEB Server от iMatix Corporation (), который и стоит по сей день.

Что касается самого Перла, то здесь несколько сложнее. Покопавшись по различным Перловым серверам (www.perl.org , www.perl.com) я узнал, что версий Перла настолько много, что выбрать что-нибудь конкретное довольно сложно. При этом каких-нибудь вразумительных рекомендаций по поводу выбора той или иной версии нигде нет. Перепробовав почти все версии для Windows, я остановил свой выбор на Active Perl ().

Человеку, избалованному всякими Виндовозами и Дельфями, писать программы на Перл довольно непривычно, поэтому настоятельно рекомендую сразу установить Perl Builder. Взять его можно на www.solutionsoft.com. Там лежала тридцатидневная Демо версия.

Ну, думаю, пора переходить непосредственно к делу. В общем случае, скрипт на Перл, как и любая другая программа, работает так:

  1. получает данные
  2. обрабатывает данные
  3. выдает результаты

Передать данные скрипту можно двумя методами - GET и POST. Разница между ними в том, что при использовании GET данные постоянно болтаются в строке адреса браузера, напимер:

Httр://treagraf.tasur.edu.ru/cgi-bin/price.pl?Category=POWER&Description=varta

В этом случае скрипт B_price.pl берет данные в переменной окружения QUERY-STRING.

$data=$ENV{"QUERY_STRING"};

При использовании метода POST данные передаются на стандартный вход скрипта. Длинна блока данных берется в переменной CONTENT_LENGTH:

Read(STDIN,$data,$ENV{"CONTENT_LENGTH"});

Теперь эти данные нужно перевести в удобоваримый вид, поскольку они закодированы.

Стандартным соглашением служит замена пробелов знаками плюс и затем кодировка оставшихся недопустимых символов с помощью ASCII-кодов в шестнадцатиричной форме, перед которыми ставится знак (%). Пример:

Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl\ ?Category=%C2%E8%E4%E5%EE&Description=%E0%E1%E2%E3

Это значит:

Http://treagraf.tasur.edu.ru/cgi-bin/B_price.pl?\ Category=Видео&Description=абвг

Декодировать строку запросов в первый раз лучше самому. На вопрос "а как?" есть множество ответов, переписывать которые нет смысла. Приведу лишь короткий пример:

Заменяем знаки (+) на пробелы

$query = ~ s/\+/ /g;

Потом заменяем все сочетания знака (%), после которого следуют шестнадцатиричные цифры, на соответствующий символ ASCII

$query =~ s/%({2})/pack("C", hex($1))/eg;

Я пользуюсь тем, что предлагает Perl Builder:

#! E:\perl5\bin\perl &GetFormInput; # вызов подпрограммы получения данных $Category = $field{"Category"}; # получаем данные из поля Category $Description = $field{"Description"}; # получаем данные из поля Description $Page = $field{"Page"}; # получаем данные из поля Page

В конце скрипта помещаем подпрограмму "прозрачного" чтения данных.

Sub GetFormInput { (*fval) = @_ if @_ ; local ($buf); if ($ENV{"REQUEST_METHOD"} eq "POST") { read(STDIN,$buf,$ENV{"CONTENT_LENGTH"}); } else { $buf=$ENV{"QUERY_STRING"}; } if ($buf eq "") {return 0;} else { @fval=split(/&/,$buf); foreach $i (0 .. $#fval){ ($name,$val)=split (/=/,$fval[$i],2); $val=~tr/+/ /; $val=~ s/%(..)/pack("c",hex($1))/ge; $name=~tr/+/ /; $name=~ s/%(..)/pack("c",hex($1))/ge; if (!defined($field{$name})) { $field{$name}=$val; } else { $field{$name} .= ",$val"; #if you want multi-selects to goto into an array change to: #$field{$name} .= "\0$val"; } } } return 1; }

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

И, наконец, Вам нужно выдать какие-то результаты броузеру клиента, причем так, чтобы броузер правильно их отобразил. То есть, выдавать результаты нужно в HTML. Это делается просто: (тоже можно по-разному)

Print "Content-type: text/html", "/n/n"; #обязательная строка print "

В поле Category Вы ввели: ", $Category, "

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

  1. При первом запуске скрипт рисует HTML страницу с формой и ссылкой в тэге ACTION на самого себя. Первый запуск определяется по отсутствию входных данных.
  2. Если входные данные есть, то получаем их, обрабатываем и выдаем результаты.

#! E:\perl5\bin\perl if (($ENV{"QUERY_STRING"} eq "") or ($ENV{CONTENT_LENGTH}=0)) { # генерируем страницу с формой } else {# получаем данные, обрабатываем и выдаем результат}

Гостевая книга

Общий алгоритм работы гостевой книги таков:

1. Если посетитель хочет сделать запись в книгу, то
1.1 Получаем данные
1.2 Записываем их в файл или в базу данных
1.3 Говорим спасибо на HTML и предлагаем почитать другие записи
2. Если посетитель хочет почитать записи в книге, то
2.1 Читаем записи из файла или из базы данных
2.2 Выводим их красиво в HTML

Для удобства восприятия я оформил пункты 1 и 2 отдельными скриптами add_guestbook.pl и read_guestbook.pl соответственно. Сообщения гостевой книги хранятся в текстовом файле построчно, т.е. на каждую запись - строка. Так сделано для удобства чтения этого файла. Пример одной записи:

Sat Dec 5 13:31:20 1998&Наташа&студентка&Good&Для начала хорошо. Успехов на данном поприще Вам, Александр!&нету@пока&194.226.60.34

Вот описание полей рассматриваемой гостевой книги.

  • Name - имя, фамилия, отчество, кличка - на усмотрение посетителя
  • Work - профессия, род занятий
  • RadioButton - три кнопки: понравилось (Good), не понравилось (Bad), пофигу (Different)
  • Text - text box комментариев и примечаний
  • Email - обратный адрес

Язык Perl был создан в 1987 году американским программистом с лингвистическим образованием - Ларри Уоллом. Спустя год после создания, в 1988 году у языка появилась поддержка регулярных выражений, а в 1989 - обработка потока данных, представленных в двоичной форме. Работа над языком Perl не прекращается. В последних версиях Perl появилась поддержка сложных типов данных и объектная модель.

Особенности языка Perl.

Структура Perl схожа с языком Си. Некоторые свойства языка Perl заимствованы из языков командных оболочек UNIX – систем.

Отличительная черта языка – возможность написания программ из одной строки. Они используются непосредственно в строке вызова командного интерпретатора.

Преимущества.

Преимущества языка Perl:

  • встроенные средства для работы со сложными структурами;
  • свободный синтаксис (одна и та же задача может решаться разными способами);
  • много готовых библиотек – модулей;
  • поддержка работы с регулярными выражениями;
  • простая обработка больших объемов данных;
  • возможность программирования объектно-ориентированным или «функциональным» стилем;
  • кросс-платформенность.

Недостатки.

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

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

Виртуальный хостинг сайтов для популярных CMS:

Для чего используется?

Системная поддержка Windows и UNIX.

Язык Perl популярен среди системных администраторов UNIX и Windows. Его особенности позволяют не привлекать другие программные средства к решению административных задач. С помощью Perl реализуется управление компьютерами из командной строки, контроль одной программы над другой и другие функции.

Электронная почта.

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

CGU – сценарии.

Применение CGU – сценариев обусловлено необходимостью обработки данных, введенных пользователем на html–странице. На сервере запускается специальная программа, которая формирует ответ пользователю после ввода данных. Язык Perl получил распространение в этой сфере из-за простоты реализации требуемых функций.

Поддержка Web-узлов.

Web-узел представляет собой хранилище текстовой информации в формате html-страниц. Язык Perl разработан с учетом необходимости обработки больших объемов текстовых данных, поэтому широко применяется в этой сфере.