Структура Perl-программ

Практические примеры программирования cgi-скриптов на Perl: работа с файлами и каталогами.

Прислал: OlegTr [ 12.03.2001 @ 08:39 ]
Раздел:: [ Статьи по Perl ]

Работа с файлами и каталогами.

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

Кратко напомню основные положения:

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

Достойные внимания примеры на Perl

  • Открыть файл для чтения:
  • Открыть файл для записи:
  • Открыть файл для добавления:
  • Открыть файл для чтения и добавления:

Где FILE-это дескриптор или описатель файла,т.е. имя,под которым он фигурирует в программе.Может быть любым набом символов,рекомендуется набирать прописными буквами во избежание неоднозначностей.

$file-переменная для файла,содержит обычно имя файла и путь к нему.Предпочтительно объявить эту переменную в начале скрипта.Это удобно,если файл находится где-то глубоко в подкаталогах,к примеру,неудобно все время набирать /usr/local/htdocs/main/pages/file.html.

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

Что касается каталога,то его тоже можно открывать для чтения командой readdir.Для того,чтобы понять как все это происходит,рассмотрим практические примеры.

Пример 1.

Рассмотрим сценарий регистрации пользователя на веб-сервере.Имя пользователя и его пароль записываются в текстовый файл и используются для его последующей аутентификации.

Скрипт выдает ответ в виде html-страницы,содержащей всю информацию,введенную пользователем.

Пример 2.

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

Надеюсь,я объяснил все достаточно подробно.Я выбрал намеренно сложные примеры,чтобы показать все операции,которые можно производить с файлами и каталогами.Файлы еще можно загружать на сервер через веб.Этому посвящен следующий раздел.

Загрузка файлов на сервер через Интернет.


Файлы можно загружать на веб-сервер через Интернет,используя формы.Вы,наверное,сами не раз это делали.Разберем более подробно,как это делается. Нужно создать форму с полем типа file и методом кодировки multipart/form-data.

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

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

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

Краткий экскурс в Perl-программирование

Оригинал: http://kamensk.net.ru/forb/
Автор: Докучаев Дмитрий

[Пред] [1] [2] [3] [4] [5] [След]


  • Вступление

  • Откуда появился язык Perl и как он расшифровывается? Перед тем как осваивать язык программирования нужно знать хотя бы общие сведения о нём.

    Perl создал некий Ларри Уолл. Perl — аббревиатура, расшифровывается как Practical Extraction and Report Language (практический язык извлечений и отчётов).
    Данная статья не научит вас в совершенстве владеть Perl`ом. Для этого нужен многолетний опыт и огромные знания. Тут я отражу лишь общие сведения по теме, чтобы вы могли оттолкнуться от них и изучать язык более углублённо.
    Ещё следует добавить, что в этой статье нет изучения дополнительных модулей для Perl. Информацию о них ищите в главе «Сайты».
    Если у вас ещё не пропало желание читать статью, то вперёд!

  • Структура языка

  • Все Perl-программы должны начинаться со строки, указывающей путь к Perl-интерпретатору. Эта строка обычно выглядит так:
    #!/usr/bin/perl Эту строку желательно использовать как под Linux, так и под Windows (вдруг скрипт придётся на сервер заливать). Без данной строки программа не будет выполняться.

    В структуру Perl`а входят: переменные, операторы, специальные символы. Все переменные начинаются с символа «$» — как символьные так и числовые. Задаются переменные следующим образом: $a=10; # Числовая переменная $b=»simvol»; # Символьная переменная Как численные, так и символьные переменные являются скалярными переменными.

    Рассмотрим действия, которые можно производить над скалярами:

    Операция Описание Примеры
    + . / % Арифметические действия print 2*7+4/(8%3); print int(127/15); #Целая часть
    ** Возведение в степень print 2**16; ++ — Инкремент и декремент $i++; # Увеличить переменную $i на 1 & | ^ ~ << >> Побитовые операции $x=3; $y=4; print $x|$y; print $x&$y; == != < > <= >= <=> Числовые операции сравнения if ($x==9) { print «Ok!»; } eq ne lt gt le ge cmp Строковые операции сравнения if ($test eq ‘ok’) { print «All right!»; } || && ! Логические операции if (($test eq ‘ok’) || ($x==9) { print «All right!»; } , Последовательное вычисление $x=10,$y=20; . Склеивание $url=’http://’.’rambler.ru’; x Повторение print ‘1234’x3; # Получится ‘123412341234’ =~ !~ Сопоставление с шаблоном if ($url=~/http/) { print «HTTP»; } = =+ =- *= /= %= **= |= &= ^= ~= <<= >>= .= x= Присваивание $x+=$y; # Прибавит к переменной $x переменную $y

    Стоит отметить разницу между апострофами и кавычками, использующихся в присваивании. В кавычках осуществляется подстановка переменных и спец. символов, а в апострофах нет. Чтобы игнорировать подстановку в кавычках, следует перед спец. символом поставить слеш ( \ ). $x=’perem1′; print ‘Var = $x’; или print «Var = \$x»; # Выведет ‘Var = $x’ print «Var = $x»; # Выведет ‘Var = perem1’

  • Массивы

  • Массивы начинаются с символа @ и конструируются следующим образом: @array1=(1,2,3,4,5); @array2=(30,40,@array1); # Добавление к @array2 всех элементов @array1 @array3=($perem1,$perem2,$perem3); Обращение к элементам массива осуществляется так: @array1=(1..20); @array1[2,10,20]=(20,3,4); # Замена элементов под номерами 2 10 и 20 числами 20 3 и 4 @array1[20,1]=@array1[1,20] # Меняет элементы местами Обращаться к отдельному элементу массива (скаляру) можно в форме $имя_массива[индекс].
    Для массивов существуют также такие функции как push(), pop(), shift(), unshift().

    Практические примеры программирования cgi-скриптов на Perl: работа с файлами и каталогами.

    push(@array1,$perem1); # Добавляет $perem1 в конец @array unshift(@array,$perem1); # Добавляет $perem1 в начало @array $perem1=pop(@array1); # Присваивает $perem1 последнему элементу массива @array $perem1=shift(@array); # Тоже самое с первым элементом

  • Хэши

    Хэш — массив, состоящих из пар «Ключ-значение». Доступ к каждому значению записи осуществляется по ассоциированному с ним ключу. Хэш выглядит так: %имя_хэша. Доступ к оттедльным его элементам: $имя_хэша{выражение}.
    Кострукция хэша выглядит следующим образом: $hash{1}=»key1″; $hash{‘myset’}=»www.rambler.ru»; $hash{1+2}=50; %hash(1,20,2,100); # Чётное кол-во элементов обязательно! # Запись аналогична $hash{1}=20; $hash{2}=100; Удаление элементов из хэша производится с помощью операции delete: delete($hash{1}); Выделить отдельные ключи и значения хэша можно при помощи функций keys() и values() соответственно: %hash(1,20,2,100,3,’test’); @key=keys(%hash); # @key=(1,2,3); @value=values(%hash) # @value=(20,100,’test’);


    [Пред] [1] [2] [3] [4] [5] [След]
  • Примеры CGI-скриптов

    1. Выдача информации в браузер

    Возьмём простейшую задачку: пусть скрипт что-нибудь посчитает и выдаст в браузер результат.

    Замените содержимое файла на следующий код:

    Вся информация, расположенная в блоке

    будет передана браузеру as is, т. е. в неизменённом виде. Как видно из приведённого выше примера, организовывать вывод таким образом очень удобно, т. к. переменные (в данном случае $b) можно вставлять прямо в html-код, а в source code выведенной страницы в этом месте будут находиться их значения. Таких блоков в тексте программы может быть сколько угодно, их можно, скажем, сгруппировать в подпрограммы (ключевое слово sub) и снести в конец файла скрипта, чтобы не загромождать текст Perl-программы html-ем.

    К слову, этот способ вывода html-кода удобен ещё и по другой причине.

    Представьте себе, что вам нужно вывести в браузер строку типа «». Ну, мало ли чем приходится заниматься. 😉 Так вот, если написать это не думая как

    мы получим ошибку, и программа выполняться не будет. Причина в том, что символ «"» будет воспринят как конец строковой константы (string terminator), и всё, что следует за ним, интерпретатор попытается воспринять как код Perl, рузультатом чего явится сообщение об ошибке. В других ситуациях — например, в случае с регулярными выражениями, синтаксис которых довольно сложен — в разряд специальных попадут «/», «?», «.», «\», «$», «^» и многие другие символы. Обычно эта проблемы решается использованием символа «\» (backslash):

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

    Пусть вам нужно отдать браузеру десятки строк html-кода. Если делать это построчно, то, во-первых, каждую строку придётся заключайть в контейнер «», но это не единственная беда: html-код содержит массу символов, которые будут восприняты как специальные и которые придётся предварять знаком «\» (на жаргоне — «эскейпить»). Блочный же вывод () позволяет не менять код и сэкономить таким образом время для чего-нибудь поважнее.

    2. Приём данных из формы

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

    Способ первый: передача параметров при помощи URL.

    До сих пор мы вызывали скрипт, направляя браузер по следующему адресу:

    Предположим, у нас есть два параметра. Перепишем URL следующим образом:

    http://localhost/chi-bin/test.pl?a=2&b=4

    Теперь наш скрипт сможет прочитать имена и значения передаваемых ему переменных, как именно — я опишу чуть позже. Обратите внимание: последовательность передаваемых скрипту данных открывается символом «?», а пары имя/значение отделяются друг от друга амперсендом («&»).

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

    Способ второй: передача данных через html-форму.

    Пусть веб-страница содержит форму примерно такого вида:

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

    Способ чтения такой формы тот же самый, что и в случае передачи параметров через URL. О нём мы сейчас и поговорим.

    Создадим страничку, содержащую ссылку

    Теперь снова перепишем :

    Я не буду подробно разбирать эту часть кода, т. к., как уже упоминалось, обучение языку Perl выходит за рамки данного курса. Скажу лишь, что результатом работы цикла foreach является ассоциативный массив (associative array), содержащий имена и значения всех входных параметров. Достаточно понять, что каждое из этих значений теперь может быть получено вызовом элемента массива , где  — имя нужного нам параметра. Запись очень хорошо это иллюстрирует.

    После вызова скрипта в окне браузера должно появиться значение переменной как произведения значений переменных и , которые мы передали скрипту в строке URL. Если что-то не получилось — добро пожаловать в . О синтаксических ошибках вам скажет сам Perlbuilder.

    3. Работа с файлами

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

    Создайте в той же папке, в которой находится файл , файл . Скопируйте туда какой-нибудь текст.

    Вот и всё. Заметьте, что слияние строк в Perl‘е обозначается точкой (например, две текстовые переменные объединяются записью ).

    Запустите скрипт, набрав его адрес в строке браузера. Если что-то не так — см. две последние фразы примера №2.

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

    Как уже было сказано выше, регулярные выражения предназначены для обработки строк. Распознать regexp (сокращённое название Regular Expression) достаточно просто, обычно их предваряет знак «=~», а сами выражения начинаются с буквы (букв), задающей тип операции: (match) — поиск подстроки, (substitute) — замена подстроки, и (translate) — трансляция. Регулярные выражения трудночитаемы, поскольку строятся в основном из специальных символов и их последовательностей, но в их основе лежит простая логика, позволяющая творить настоящие чудеса. Вот пара простых примеров:

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

    Нравится? Сомневаюсь.

    Но ещё обязательно понравится. Кстати. все тексты в библиотеке обрабатывались при помощи регулярных выражений, а значит, какая-то польза от них всё-таки есть… 😉

    top

    Добавить комментарий

    Закрыть меню