П О Р Т А Л                            
С Е Т Е В Ы Х                          
П Р О Е К Т О В                        
  
Поиск по сайту:
                                                 
Главная

О проекте

Web-мастеру
     HTML & JavaScript
     SSI
     Perl
     PHP
     XML & XSLT
     Unix Shell

MySQL

Безопасность

Хостинг

Другое








Самое читаемое:

Учебник PHP - "Для Чайника".
Просмотров 3524 раз(а).

Иллюстрированный самоучитель по созданию сайтов.
Просмотров 6122 раз(а).

Учебник HTML.
Просмотров 3276 раз(а).

Руководство по PHP5.
Просмотров 5498 раз(а).

Хостинг через призму DNS.
Просмотров 4148 раз(а).

Подборка текстов стандартных документов.
Просмотров 55773 раз(а).

Учебник PHP - Самоучитель
Просмотров 3093 раз(а).

Документация на MySQL (учебник & справочное руководство)
Просмотров 5747 раз(а).

Внешние атаки...
Просмотров 3843 раз(а).

Учебник PHP.
Просмотров 2826 раз(а).

SSI в примерах.
Просмотров 37463 раз(а).



 
 
| Добавить в избранное | Сделать стартовой | Помощь





4.5 Подпрограммы и модули

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

Описать и использовать подпрограмму можно несколькими способами:

  1. sub NAME; - подразумевает описание в дальнейшем тела подпрограммы.
  2. sub NAME BLOCK - непосредственное описание.
  3. $subref = sub BLOCK - анонимное описание.
  4. use PACKAGE qw(NAME1, NAME2, NAME3) - включение подпрограмм из модулей.
Вызвать подпрограмму можно тоже несколькими способами:
  1. &NAME(LIST) - скобки обязательны для & формы.
  2. NAME(LIST) - & не обязательно со скобками.
  3. NAME LIST - скобки можно опустить в случае предварительного описания или включения подпрограммы из модуля.
Аргументы передаются подпрограмме в виде локального массива @_, его элементы являются ссылками на реальные скалярные параметры. Подпрограмма возвращает значение, полученное в результате исполнения последнего оператора подпрограммы. Как уже говорилось, подпрограмма вызывается использованием префикса & перед ее именем, в Perl 5 этот префикс не обязателен. Пример:
  sub MAX {

      my $max = pop(@_);

      foreach $foo (@_) {

          $max = $foo if $max < $foo;

      }

      $max;

  }

  ...

  $bestmark = &MAX(1,2,3,4,5);
Подпрограмма может вызываться рекурсивно. Если подпрограмма вызывается с использованием & формы, то список аргументов необязателен. Если вы хотите создать внутри модуля его собственную, невидимую снаружи подпрограмму, то описание должно быть анонимным:
  my $subref = sub {...}

  &$subref(1,2,3);

4.5.2 Пакеты

Perl поддерживает механизм альтернативного именного пространства для каждого отдельного пакета. Обычная программа является пакетом с именем main. Можно ссылаться на переменные или дескрипторы файлов из других пакетов посредством использования префикса перед именем переменной, состоящего из имени пакета и двойного двоеточия: $Package::Variable. Если имя пакета нулевое, то предполагается использование переменной из main пакета. То есть $::sail эквивалентно $main::sail. Пакеты могут включать в себя другие пакеты, в таком случае чтобы обратиться к переменной нужно применить описанное обозначение рекурсивно: $OUTER::INNER::var.
В пакете могут содержаться только переменные, чьи имена начинаются с буквы или подчерка, остальные переменные содержатся в пакете main. Кроме того зарезервированные переменные, как то STDIN, STDOUT, STDERR, ARGV, ARGVOUT, ENV, INC и SIG также содержатся в главном пакете.

package mypack;

sub main::mysub {

    ...

}

4.5.3 Таблицы символов

Таблицы символов пакета хранятся в ассоциативном массиве с тем же именем и двойным двоеточием в конце. Для пакетов включенных в пакет имя символьной таблицы составляется аналогичным образом: %OUTER::INNER::.

4.5.4 Конструкторы и деструкторы пакетов

Существует две функции специального вида - конструкторы и деструкторы. Это BEGIN и END программы в их описании необязательно использование sub. Подпрограмма BEGIN исполняется сразу, как только это возможно, то есть в момент, когда она полностью определена, даже перед тем как обрабатывается остаток содержащего файла. В файле может быть несколько блоков BEGIN. Они исполняются в порядке определения.
Подпрограмма END исполняется в самом конце. В файле может содержаться несколько END блоков, они исполняются в обратном порядке.

4.5.5 Классы

В Perl 5 нет специального синтаксиса для описания классов, но пакеты могут функционировать как классы, если они содержат подпрограммы функционирующие как методы. Такие пакеты могут также брать некоторые методы из других пакетов-классов. Для этого необходимо перечислить имена других пакетов в массиве @ISA.

4.5.6 Модули

В Perl 5 понятие пакетов расширено в понятие модулей. Модули это пакеты находящиеся в одноименном файле, включенном в библиотеку. Модули подключаются следующим образом:

  use Module; или use Module LIST;
Это эквивалентно:
  BEGIN { require "Module.pm"; import Module; }
Все модули имеют расширение .pm. Если именное пространство модуля пересекается с именным пространством основной программы то всегда используется use, если не пересекается то можно использовать require.
Стандартные модули Perl описаны в документации.

[Назад] [Содержание] [Вперед]



Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту: