logo search
Vvedenie_v_Veb_programmirovanien_2 / Vvedenie_v_Veb_programmirovanien_2

Подпрограммы

Подпрограммы необходимо определить или объявить (декларировать):

sub имя; #- декларация. Определение ниже.

sub имя блок; #- Декларация и определение.

sub имя (прототипы) {блок;} #- То же, но с параметрами.

Вызов подпрограммы:

имя(список параметров); # символ '&' можно не указывать.

имя список; # Если подпрограмма уже декларирована.

&имя; # Параметры в @_

Все параметры передаются подпрограмме как массив @_ ,который содержит адреса параметров. Соответственно $_[0] - первый параметр, $_[1] - второй и т.д. Возвращаемое значение подпрограммы - результат последнего оператора. Можно возвращать значение используя return.

Для применения переменных, доступных только внутри блока или подпрограммы, необходимо определить их с помощью функции my(список). Если переменная одна, то скобки можно опустить.

# Программа вычисления факториала.

print fact(3); # вычислить факториал 3*2*1

sub fact # Определяем подпрограмму.

{ my $m; # private переменная

$m = $_[0];

return 1 if $m <= 1;

return($m * fact($m -1)); }

Функция my позволяет указывать начальные значения переменных: my(список) = выражение; Так в приведенном примере лучше было написать: my($m) = $_[0];

В Perl реализован механизм модулей - группы подпрограмм включенных в один файл. Начало модуля определяется директивой: packages имя_модуля;. Конец модуля это конец блока или файла. Головной модуль имеет по умолчанию имя main. На имя внутри модуля можно ссылаться, добавляя '::' после имени модуля. Например: $main::var1.Для импортирования подпрограмм из других модулей используйте: use модуль qw(подпрограмма1 подпрограмма2 );

В Perl используются конструкторы и деструкторы - подпрограммы, которые выполняются в момент создания (удаления) объекта. Для модуля это подпрограммы с именами BEGIN и END.

Perl библиотеки обычно поставляется с дистрибутивом Perl и разделяются на pragma библиотеки (директивы компилятору) и стандартные библиотеки. Pragma библиотеки используют так: use имя;

В стандартный набор входят следующие pragma библиотеки:

diagnostics - включить режим расширенной диагностики; integer - использовать целочисленную арифметику; overload - hежим переопределения операторов; sigtrap - режим слежения за прерываниями; strict -режим ограниченного использования "опасных" операторов; subs - режим обязательного декларирования подпрограмм.

Рассмотрим некоторые стандартные библиотеки: AnyDBM_File - возможность работы с разными типами баз данных. Carp - предупреждения об ошибках. Config - доступ к конфигурации Perl. Cwd - получить имя текущей рабочей директории. English - использовать длинные имена встроенных переменных. Env - импортировать имена переменных окружения. ExtUtils::MakeMaker - создает файл проекта Makefile. File::Basename -синтаксический разбор спецификации файла. File::Find - Быстрый поиск файлов по директориям. File::Path –создание/удаление директорий. Net::Ping - тест доступа к хосту. Socket - определение структур и констант. Подробное описание каждой библиотеки записано в самом файле.

Программисты, работающие с Perl, создали общедоступную библиотеку модулей CPAN. Она доступна через Интернет.

Файлы

Существует три способа открытия файла: для чтения (read), дополнения (append) и записи (write). Для режима read синтаксис операции открытия файла следующий: open (HANDLE,”filename.txt”);

В круглых скобках заключен дескриптор файла HANDLE и имя файла. Для считывания информации из файла выполняется так называемая операция ромба, обозначаемая символами (<>):

open (HANDLE,”filename.txt”);

while (<HANDLE>){

# цикл будет считывать информацию из файла построчно

}

Отличие синтаксиса open() для операции записи заключается в том, что перед именем файла стоит символ (>). Этот символ сообщает, что следует создать указанный в кавычках файл и записать или обновить его содержимое. Чтобы записать в него информацию, нужно обратиться к помощи оператора print:

open (HANDLE,”>filename.txt”);

print HANDLE ”Записать этот текст в файл...”;

Режим добавления (Append) синтаксически выглядит так:

open (HANDLE,”>>filename.txt”);

print HANDLE ”Дописать этот текст в файл...”;

При его описании ставится двойной знак (>>). Если указанный файл не существует, то он будет создан, в противном случае введенная информация будет добавлена в конец. Когда выполняется операция дополнения, данные можно не только записывать, но и считывать из файла.

В случае успешного выполнения функция open() возвращают значение true, иначе — false. Закрыть файл можно с помощью функции close(HANDLE). Всякий раз при открытии файла разумно использовать вместе с оператором open() оператор die. Бывает, что файл по какой-то причине нельзя правильно открыть. В подобном случае оператор die прерывает выполнение программы и выдает сообщение об ошибке при открытии файла.

open (HANDLE,”>>f.txt”)||die”Ошибка добавления в файл $!\n”;

Функция die прерывает выполнение программы. Выдается сообщение об ошибке, а также информация о том, что ее вызвало. Perl сохраняет сведения о последней системной ошибке в специальной переменной $!. В синтаксисе используется «логическое ИЛИ» (||).

Проверка существования файла.

$filename = ”filename.txt”;

if (-e $filename) {

print ”Файл $filename уже существует\n”;}

else { print ”Файл $filename не найден\n”;}

Чтобы убедиться в наличии какого-либо файла и возможности чтения из него, нужно вместо операции -e выполнить -r, а в случае требования возможности записи —w. Можно проверить один и тот же файл на доступность чтения и записи информации:

$filename = <STDIN>;

chomp ($filename);# убрать символ новой строки

if (-r $filename && -w $filename) {

# файл существует, мы можем читать из него и записывать в него

}

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

@files = <*.txt>;

foreach (@files) {

print ”$_ is readable\n” if -r;

}

При большинстве подобных проверок, а их около 20, возвращается значение true или false.

При работе на Perl под управлением Windows нужно указывать полный путь к файлу (вместе с именем диска), над которым будут выполняться какие-либо действия, например:

open (HANDLE,”c:/scripts/newfile.txt”) || die ”Error opening c:/scripts/newfile.txt $!\n”;

close (HANDLE);