Использование языка PERL для написания CGI-cкриптов - Язык программирования PERL. Сфера применения

Как вы узнали из предыдущей главы, CGI обеспечивает узлам Web вoзмoжнoсть интерактивной работы с клиентскими программами, в качестве которых обычно выступает броузер. Во многих случаях узлы используют скрипты CGI для доступа к базам данных в тех случаях, когда клиент и сервер должны обмениваться данными. Использование CGI позволяет пользователю получать доступ к базе данных на Web, используя обычный Web-броузер. CGI-скрипт читает и обрабатывает содержание НТМL-форм, устанавливает соединение с базой данных, посылает ей запросы, обрабатывает результаты ответов, формируя на их основе новый НТМД документ, и затем посылает его обратно пользователю. Кроме того, все эти шаги должны быть сделаны так, чтобы обеспечить безопасность сервера.

Знакомство с языком PERL

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

<HELLO WORLD> НА ЯЗЫКЕ PERL

Большинство учебников по языкам программирования начинается с простейшей программы, которая выводит текст <Hello World>. В соответствии с этой традицией мы приводим нашей книге несколько примеров программ <Hello World>. Следующий код служит для вывода на экран сообщения <Hello World> три раза, используя три различных способа:

# Три способа как сказать <Hello World>

printf("Hello world ");

printf("%s ", 'Hello world');

print "Hello World", " "

Первая строка представляет собой комментарий. На языке Perl знак диез (#) означает комментарий. Когда Perl находит этот знак, он игнорирует весь текст, начиная с него и до конца строки. Знак диез служит единственным способом ввести комментарии на языке Perl. В отличие от С здесь нет конструкции, которая сразу бы определяла несколько строк комментариев. На первый взгляд функция printf выглядит так же, как в языке С. Однако вы можете заметить, что программа не содержит функции main. Хотя скрипты поддерживают подпрограммы (аналогичные функциям С), скрипт не определяет раздела, который бы содержал тело функции main. Вместо этого интерпретатор Perl сразу начинает исполнение скрипта с первого выражения в файле. Второе выражение, содержащее функцию printf, опять-таки выглядит аналогично своему использованию в языке С, за исключением того, что вторая строка аргументов заключена в одинарные кавычки ('') в противоположность двойным ("), используемым в С. В языке Perl строка в двойных кавычках означает определенный род преобразования. Например, интерпретатор Perl преобразует выражение новой строки в двойных кавычках " " в символ новой строки. Скрипт Perl использует одинарные кавычки для включения строковых литералов, т. е. строковых выражений, как это написано выше. Например, Perl напечатает выражение в одинарных кавычках (' ') как два знака (') и 'n', а не как знак перехода на новую строку. Наконец, последняя строка кода программы содержит функцию print, которой нет в языке С. В этом случае наиболее полезная черта этой функции заключается в отсутствии скобок. Оказывается, что вы можете всегда включать скобки в состав функция языка Perl. Однако в большинстве случаев необходимости в них нет. Perl требует включения скобок только в том случае, если без них выражение оказывается не полностью определенным, двусмысленным. Тем не менее, включение скобок в код соответствует хорошей традиции, и вам не следует отказываться от нее.

Установка PERL

Теперь настало время попробовать работать с языком Perl непосредственно. Если у вас не установлен Perl на вашей системе, то необходимо сделать это. Обратитесь к файлу Perl. txt на CD-ROM, который входит в комплект книги. Далее полагаем, что Perl правильно установлен. Наберите команду для запуска скрипта Perl, аналогичную следующей:

C:PERL>perl script-name <ENTER>

Например, создайте файл с именем hello. pl, содержащий показанную ниже строку:

Print "Hello world "

Далее в командной строке наберите следующую команду:

C:PERL>perl hello. pl <ENTER>

На экране вы увидите следующий текст:

Hello World

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

#!/usr/bin/perl

print "Hello world "

В этом случае первая строка указывает системе, что необходимо запустить скрипт, используя Perl. Можно видеть, что эта строка является комментарием и это не случайно, так что Perl, проигнорирует ее. Тем не менее, большинство UNIX командных скриптов shell просмотрят два первых символа в любом исполняемом скрипте. Если первыми символами служат #!, то shell будет использовать остаток строки в качестве команды для запуска скрипта. В данном случае такой командой является /usr/bin/perl. Shell пересдаст имя скрипта Perl автоматически. Для того чтобы запустить скрипт, необходимо запустить команду chmod для того, чтобы указать скрипту на файл, который необходимо выполнить (например, chmod + хhello. pl). В зависимости от программы shell, также может потребоваться набрать команду rehash для того, чтобы указать программе shell, что вы добавили новую команду. Возможно, также потребуется модифицировать путь к Perl, если он не инсталлирован в подкаталоге /usr/bin вашей системы.

Примечание: Большинство скриптов Perl используют в качестве расширения. р1, но это необязательно. Если вы запускаете скрипт Perl как отдельную программу, то, возможно, более удобным будет вообще опустить расширение.

Использование отладчика PERL

Может показаться преждевременным говорить сейчас об отладчике Perl. Но использование отладчика может оказаться исключительно полезным при изучении языка Perl. С ним вы можете легко испытать все программы, которые приведены в этой главе в качестве примеров. Фактически можно внести любое выражение Perl непосредственно в отладчик, используя его в качестве интерактивного Perl. Таким способом можно ознакомиться со многими возможностями языка, что намного проще, чем создавать и запускать полные скрипты. Отладчик Perl встроен в сам Perl. Можно запустить отладчик, используя ключ - d в командной строке следующим образом:

C:PERL> Perl - d hello. pl <ENTER>

В таком случае Perl загрузит скрипт hello. pl и начнет отладку. Если вы используете UNIX-систему, то можете поместить комментарий #!/usr/bin/perl - d в самом начале скрипта Perl. Если хотите загрузить Perl с отладчиком без загрузки скрипта, то можете использовать следующую команду: С: > Perl - de 0 <ENTER> В таком случае аргумент командной строки - d указывает Perl на необходимость вызова отладчика, а аргумент - e 0 заставляет выполнить Perl скрипт, состоящий из 0 строк. Поскольку скрипт 0 не существует, то Perl просто запустит отладчик. Если Perl установлен на вашу систему корректно, то на экране вы увидите следующие данные, которые говорят, что вы находитесь в отладчике:

Loading DB routines from $RCSfile: perldb. pl, v $$Revision: 4. 0. 1. 3

$$Date: 92/06/08 13:43:57 $

Emacs support available.

Enter h for help.

main '(p1000159:1):

DB<1>

Если Perl выводит ответ, но указывает на ошибку, такую как Can't locate perldb. pl @INC, то, значит, Perl установлен в вашей системе некорректно. В таком случае прочитайте readme-файлы, которые сопровождают вашу версию Perl. В отладчике можно набрать любое выражение Perl, и он немедленно его исполнит. Дополнительно можно использовать следующие команды отладчика: ? h - распечатать в качестве подсказки список команд отладчика? n - выполнять до следующего выражения? <CR> - повторить последнюю команду n или s? p выражение - сокращение для команды print выражение? q - окончить работу? r - исполнять до выхода из подпрограммы? s - один шаг по скрипту (со входом в подпрограмму)

Например, следующая команда отладчика использует функцию print для того, чтобы вывести на экран сообщение Hello World:

DB<1> prinf "Hello World "; <ENTER>

Hello World

DB<2>

Используя отладчик с помощью команды р, можно вывести на экран любое выражение. Для упрощения набора в отладчике можно опускать точку с запятой в конце выражения, поскольку отладчик добавит ее для вас. Наконец, отладчик всегда переходит на новую строку для новой команды. Следующий код иллюстрирует использование команды р: <ENTER>

DB<2> р "Hello World " <ENTER>

Hello World

DB<3>

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

Примечание: Для того, чтобы ввести выражение из многих строк в отладчик (debugger), необходимо использовать символ продолжения<> конце каждой строки. . Иначе отладчик сообщит о синтаксической ошибке.

Следующая команда иллюстрирует использование символа продолжения при работе с отладчиком:

DB<3> for ($i = 0; $i < 10; $i++) { <ENTER>

cont: print $i; <ENTER>

cont: } <EIITER>

0123456789

DB<4>

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

Типы данных в PERL

Типы данных используются в программах при объявлении переменных. Короче говоря, тип данных определяет то множество значений, которые может принимать переменная, а также набор операций, которые программа может выполнять с ней. В языке Perl данные могут быть числом или строкой символов. Одно значение называется скалярной величиной или просто скаляром. Ниже приведены примеры скалярных значений, которые используются в языке Perl: ? Десятичные: 127 или 127. 0 или 1. 27Е2 ? Шестнадцатиричные: Ox7F или 0x7f? Восьмеричные: 0177 (первый 0 указывает, что используется восьмеричное число) ? Строка: "Hello World " или 'Hello World'

Например, следующая команда использует отладчик Perl для того, чтобы вывести число 0177 восьмеричной системы, соответствующее числу 127 десятичной:

DB<4> р 0177 <ENTER>

127

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

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

В качестве внутреннего представления всех чисел используется формат с плавающей запятой двойной точности (double). Иными словами, среди внутренних форматов нет целочисленного. Тем не менее, в большинстве случаев вы можете не обращать на это внимания, и Perl сделает все сам как надо. Например, если вы используете величины в контексте, где только целочисленные значения имеют смысл, Perl сам автоматически усечет число.

Примечание: Если вы программируете на С и использовали целочисленное деление с усечением целых чисел автоматически, то, программируя на языке Perl, надо не забыть выполнить усечение вручную, используя функцию int().

Следующая команда иллюстрирует, как Perl обрабатывает числа целого типа и с плавающей запятой:

print 6 &; 3; # выведет 2

print 6. 9 &; 3. 1 #

print 7 / 2 # выведет 2. 3333 не целое

print int(7/3) # выведет 2

Точно так же, как Perl преобразует числа с плавающей запятой в целые числа: когда скрипт использует целочисленные значения, он также преобразует числа в строки и наоборот, когда такое преобразование имеет смысл. Например, если скрипт использует числа в контексте, где только строки имеют смысл, например, при соединении строк, он конвертирует числа в строки. Аналогичным образом, если требуется использовать строки там, где только числа имеют смысл, то Perl конвертирует их в числа. Работая со скриптами Perl, обычно не надо беспокоиться о внутреннем представлении скалярных величин. Perl поддерживает также концепцию булевых значений, но не имеет для их описания специального типа. Как и в С, численное значение рассматривается истинным, если оно не равно нулю. Дополнительно строковое значение рассматривается как истинное, если оно не равно '' или '0'. Некоторые булевы операторы, такие как <>> (больше), возвращают единицу в качестве значения<истинно> и нуль - в качестве <ложно>. Тем самым, ваш скрипт должен просто рассматривать ненулевые величины как строчного типа, так и числового в качестве булева значения <истинно>. Скрипты Perl могут группировать скалярные величины вместе и создавать список (list). Если скрипт хранит список в какой-то переменной, то эта переменная становится массивом (array).

Переменные

Perl поддерживает три типа переменных: скаляры, массивы и ассоциативные массивы. Как и в языке С, имена переменных пишутся с различением строчных и заглавных букв. Таким образом, имена VAR, Var и var описывают различные переменные. Скрипт может иметь скалярную переменную под именем var и переменную-массив, также названную var. Они будут различаться в языке Perl в соответствии с контекстом.

Примечание: Переменные Perl не типизированы, как это делается и в С. Например, скалярная переменная может содержать любой тип скаляра, и приведение типов осуществляется автоматически. Также, как вы могли уже заметить, переменные на языке Perl необязательно должны быть объявлены. Если переменная не объявлена, то Perl рассматривает ее как глобальную. Ниже вы познакомитесь с объявлением переменных и их областью видимости.

Похожие статьи




Использование языка PERL для написания CGI-cкриптов - Язык программирования PERL. Сфера применения

Предыдущая | Следующая