провайдер, выделенная линия, хости
нг статьи и документация | как выбирать провайдера | гостевая книга | e-mail | home | вход в базу  


В начало каталога провайдеров
Новости провайдеров
Список провайдеров по городам
Модемное подключение
Выделенная линия
Хостинг
Colocation
Интернет-карты
Тестовый доступ
Отзывы клиентов
Форум Москва
Форум Санкт-Петербург
Карта АТС
Статьи и документация
Интересные ссылки
Работа у провайдера
Провайдерам - как попасть в базу




Подпишись на новости!

Subscribe.ru:
Maillist.ru:
.

Почитать:

Программирование на PERL. Основы работы с HTML с использованием HTML::Parsertie.
PHP: Безопасность средствами суперглобальных массивов
Perl: Рисуем диаграммы с использованием GD::Graph
PHP: Библиотека обработки HTML-текста из PHP-скриптов
Perl: Создание графики на лету с использованием GD
mod_perl за 30 минут
RU.PHP FAQ
Программирование на PHP. Новый тип навигационной системы при постраничном выводе.
Программирование на PERL. Почему mod_perl?.
Программирование на ASP. Краткое введение в технологию.
Программирование на PERL. Построим web-интерфейс на Perle, если база - Oracle.
Программирование на PERL. Работа с базами данных. Краткое введение в DBI. . . . . . . .






Каталог провайдеров / Articles / Web / perl-introduction-book-maslov-9.html


Реклама
Нужна выделенная линия?

Тендер на providerZ.ru - заполни анкету и отправь запрос сразу в 10 компаний.



Следующий Предыдущий Содержание

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

Для применения подпрограммы ее необходимо определить либо в текщем модуле (файле) либо во внешнем модуле (файле). Подпрограммы определяются и декларируются следующим образом:

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

sub имя (прототипы); То же но с декларацией параметров.

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

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

Для определения динамичской анонимной подпрограммы можно указать:

$переменная = sub блок;

Для импортирования подпрограмм из других модулей используйте:

use модуль qw(подпрограмма1 подпрограмма2 );

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

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

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

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

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

Подпрограмму можно вызвать используя префикс '&' перед именем подпрограммы. Если подпрограмма предварительно продекларирована то префикс и скобки можно опустить.

9.1 Private переменные

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

Если переменная одна то скобки можно опустить.

my() декларирует private переменные в пределах текущей подпрограммы, блока, функции eval() или do/require/use файлов. Private переменные аналогичны auto переменным в С.

Пример:

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

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

sub fact # Определяем подпрограмму. { my $m; # private переменная но не local ! $m = $_[0]; return 1 if $m <= 1; return($m * fact($m -1)); }

Можно указывать начальные значения private переменных как:

my(список) = выражение;

Так для вышеприведенного примера лучше было написать:

my($m) = $_[0];

9.2 Переменные типа local

В общем лучше использовать private переменные так-как это надежней и быстрее. private переменные обеспечивают лексическую область применения (видимости) а local - динамическую. Обычно это переменные форматов значение которых должно быть видимо из вызываемых подпрограмм. Применение функции local() не целесообразно в циклах так как она вызывается каждый раз и таким образом заметно замедляет время выполнения цикла.

9.3 Прототипы (prototypes)

Для краткого описаня типа параметров передаваемых подпрограмме можно применять прототипы. В Пел существуют следующие прототипы:


        Декларация              Пример вызова
        sub mylink($$)          mylink $old, $new
        sub myvec($$$)          myvec $var, $offset, 1
        sub myindex($$;$)       myindex &getstring, "substr"
        sub myreverse(@)        myreverse $a, $b, $c
        sub myjoin($@)          myjoin ":",$a,$b,$c
        sub mypop(\@)           mypop @array
        sub mysplice(\@$$@)     mysplice @array, @array, 0, @pushme
        sub mykeys(\%)          mykeys %{$hashref}
        sub myopen(*;$)         myopen HANDLE, $name
        sub mypipe(**)          mypipe READHANDLE, WRITEHANDLE
        sub mygrep(&@)              mygrep { /foo/ } $a, $b, $c
        sub myrand($)           myrand 42
        sub mytime()            mytime

Здесь: \'символ' - параметр с типом 'символ'

'@' или '%' - все оставшиеся параметры как список

'$' - скаляр

'&' - безимянная подпрограмма

'*' - ссылка на таблицу имен

';' - разграничитель обязательных и не обязательных параметтров.

9.4 Ссылка как параметр

Иногда нужно в качестве параметра передать подпрограмме не значение элемента массива а ссылку на него, что бы подпрограмма могла изменить значение элемента. Для этого в Пел к имени переменной добавляется символ '*' Подбное выражение называют 'type glob' так как в Юниксе символом '*' обозначают "все возможные значения". Поэтому '*' для массива означает "все элементы массива". Для скаляров употряблять '*' не имеет смысла т.к. они и так передаются ссылкой и вы можете изменять значение параметра изменяя например переменную $_[0].

9.5 Переопределение встроенных функций

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

Для этого нужно перечислить имена этих функций в виде:

use subs 'функция1', 'функция2' ....;

и далее в модуле определить сами функции.

9.6 Автозагрузка

Если вы попытаетесь вызвать не существующую функцию то Пел выдаст немедленно сообщение об ошибке. Но если вы определите подпрограмму с именем 'AUTOLOAD' то она будет вызвана с теми же параметрами а переменная $AUTOLOAD будет содержать имя не существующей подпрограммы. Данный механизм очень одобен для средств отладки.


Следующий Предыдущий Содержание





поиск провайдера подключение по модему интернет-карты хостинг colocation выделенная линия тестовые входы отзывы об провайдерах интернет форум о провайдерах работа у ISP

Каталог провайдеров / Articles / Web / perl-introduction-book-maslov-9.html



Advert

Предложений::

Dial-up: 919
Хостинг: 190
Colocation: 140
Выделенная линия: 735

Закажи выделенную линию!

Новые отзывы

Отзывы о Cтрим (Stream)
Sochi Communication Center
CENTRAL TELEGRAPH
MTU-Intel
Corbina telecom
2COM
Web Plus
TambovCNIT
Tel
RiNet ISP
MTW-hosting

Интересные ссылки

What's New?
Holms.ru
Adsmart.ru
how-to.ru

Рекомендуем


Copyright © 1999-2000 Чегляков Алексей, Required Group
Design Милашенко Анастасия, Hosted by Rinet ISPSite engine RWSM CMS