Начинаем работать с Perl

()

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

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

Если посмотреть, то вы обнаружите что на каждой Linux системе установлен Perl, и кроме того вы можете скачать Perl для Windows - с сайта activestate.com.

Базовые принципы

Perl - язык-интерпретатор (как PHP), и он не "строго типизированный", что означает, что вам не обязательно объявлять переменную, перед тем как её использовать, и указывать какого она типа. Вы можете написать что-то вроде этого:

$a = ‘hello world’ ;
$b = 12 ;
print $a ;

Как вы видите, каждое выражение заканчивается точкой с запятой, строка заключается в апострофы.

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

print ‘$a\n’ ;

В результате будет выведена строка "$a\n’"

Если использовать код

print “$a\n” ;

то с новой строки будет выведена сообщение "hello world"

Всегда проверяйте правильность строк внутри двойных кавычек.

Как запустить скрипт? Если вы хотите провести простой тест - используйте Perl интерактивно: откройте командное окно и наберите perl (в Windows, вам возможно придется добавить путь к файлу perl.exe).

Теперь набирайте строчки скрипта. В конце добавьте пустую строку и затем нажмите Ctrl & D. Обычно нужно сделать что-нибудь более сложное, для этого напишите свой скрипт в текстовый файл и сохраните его с расширением .pl. Затем запустите его, выполнив команду

perl scriptname.pl

В системе Linux вы можете первой строкой написать #!/usr/bin/perl и использовать команду chmod для того чтобы сделать файл скрипт выполняемым. Тогда для запуска скрипта вам нужно будет только написать его имя, например ./scriptname.pl. Обычно строки, начинающиеся со знака # являются комментарием, но первая строка в *nix указывает системе интерпретатор скрипта.

Блоки и циклы

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

#!/usr/bin/perl
# simple test script to read a file and print it
#
while (<>) {
print $_ ;
}

Сохраните файл как test.pl и запустите его используя следующую команду:

perl test.pl test.pl

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

Для задания условий в цикл while используются значки <>. Специальное указание "<>" означает что используется стандартный ввод, а специальная переменная "$_" означает текущую строку ввода. Таким образом, скрипт читает строку со стандартного ввода и выводит её. Если вы просто наберете perl test.pl, он будет ожидать пока вы наберете какую-нибудь строку и затем выведет её, и так будет продолжаться пока вы не нажмете Ctrl & D, что будет означать конец скрипта.

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

Оператор "=~" сравнивает совпадают ли переменные, а оператор "!~" проверяет несовпадение. Добавть в конец скрипта следующий строки и запустите его командой perl test.pl test.pl:

while(<>) {
if ( $_ =~ /Fred/ ) {
print “Fred is here, line 4
$line: $_\n” ;
}
$line++ ;
}

Результатом будут две строки кода и перед каждой примерно такое сообщение: "Fred is here, line 7."

Практическое приложение

Теперь нас есть простой скрипт, который ищет в файле слово "Fred", но для чего мы можем его использовать?

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

Очень часто, на простых вебсайтах работа с базами данных уже реализована. Но если у вас уже есть данные в формате Excel или похожем, вы можете сохранить их формате CSV (Comma Separate Values - данные разделенные запятой), или другом текстовом формате.

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

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

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

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

Затем команда open читает файл, расположенный в той же директории, что и скрипт, CSV файл, который мы создали в Excel; в качестве идентификатора файла используется имя "CONTACTS". Его мы будем использовать в цикле while для чтения файла. Поскольку все данные разделены запятой, мы можем записать их в различные переменные.

Первая команда next if нужна для пропуска следующей итерации цикла; мы убеждаемся, что не выведем строку, содержащую заголовок, который Excel добавляет в CSV файл. Вторая команда используется для нескольких вещей; здесь есть сравнение, с которым мы знакомились раньше, но в конце используется маленькая буква i, которая заставляет Perl игнорировать блок.

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

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

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

Таким образом, если вы сохранили скрипт на сервере под именем contacts.pl - кроме этого его возможно придется сделать исполняемым - и затем загружаете страницу http://[название_вашего_сервера]/contacts.pl, вы увидите список, состоящий из всех записей таблицы. Но если вы используете адрес вроде такого: "contacts.pl?smith", вы увидите только строку данных, в которой есть это имя.

Теперь все, что вам нужно делать - это время от времени обновлять данные. В будущем, вы можете изменить тип данных на text/html и использовать HTML тэги в командах вывода. Или вы можете создавать временные файлы и затем использовать команды Perl для поиска и замены, и записать данные в эти временные файлы для дальнейшего использования.

Чтение списка контактов из CSV файла с помощью Perl

#!/usr/bin/perl
#
# Emergency contacts script for PCW
print “Content-type: text/plain\n\n” ;
open( CONTACT, ‘EmergencyContacts.csv’) ;
while(<CONTACT>) {
( $name, $home, $mobile) = split(‘,’) ;
next if $name eq ‘Name’ ;
next if $name !~ /$ENV{‘QUERY_STRING’}/i ;
print “Contact details for $name: tel $home, mobile: $mobile\n” ;}

Источник

Ключевые слова: perl.

Подписаться на обновления: RSS-лента Канал в TamTam Telegram канал Канал в ICQ

Комментарии:

Svolotch 2007-01-30 09:20:32 (#)

>> open( CONTACT, ‘EmergencyContacts.csv’) ;
а закрывать файл не нужно?

MooSE 2007-01-30 13:56:15 (#)

> а закрывать файл не нужно?
Он по идее сам закроется позавершению скрипта
Новый комментарий

Жирный текстКурсивный текстПодчёркнутый текстЗачёркнутый текстПрограммный кодСсылкаИзображение




© 2006-2024 Вадим Калинников aka MooSE
Политика конфиденциальности