Приглашаем посетить
Мордовцев (mordovtsev.lit-info.ru)

Использование пакетов для изоляции подпрограмм

Использование пакетов для изоляции подпрограмм

Если у вас имеется много подпрограмм, особенно подпрограмм, которые вы храните в различных файлах, то может возникнуть коллизия имен переменных, когда одно и то же имя переменной используется в различных целях. Perl помогает избежать этого с помощью пакетов ( packages ). Как известно, объявляя локальные переменные для подпрограмм, можно избежать коллизии имен. Однако если не­сколько подпрограмм совместно используют какие-то специфические данные, то эти данные могут потребовать глобальной области видимости, что как раз и мо­жет вести к коллизии имен. Используя пакеты, можно группировать глобальные данные в частные пространства имен ( name - spaces ), вне пределов которых глобальные переменные не видны, т. е. неизвестны. Рассмотрим приведенный ниже простой пример, в котором две подпрограммы (находящиеся в различных файлах) исполь­зуют частные, индивидуальные пространства имен.

#   Код в файле one . pl

sub sub_one

            {

                        package demo_one;

                        $some_data = 10;

            }

#   *   *   *   *   *   *   * *

#   Код в файле two.pl

sub sub_one

            {

                        package demo_two;

                        $ some _ data = 20;

            }

Как можно видеть, первая подпрограмма использует имя пакета demo _ one , вторая подпрограмма использует имя пакета demo _ two . Обе подпрограммы могут устанавливать и использовать переменную $ some _ data без возникновения коллизии имен между одной и другой глобальными   переменными.

Скрипт «знает» имя пакета, в пределах которого находится переменная, и он организует доступ к ней, использует имя пакета в качестве префикса к имени переменной. В следующем примере имя пакета package _ one или package _ two добавляется в качестве префикса к имени переменной some _ data :

&sub_one;

&sub_two;

print “ Переменная 1 $package_one’some_data\n”

print “ Переменная 2 $package_two’some_data\n”

Когда вы используете пакеты языка Perl , можете создать уникальное пространство имен в пределах текущего файла исходных кодов путем помещения инструкции package в начале файла, как показано ниже:

package some_package_name

$some_data = 1;

sub some_sub

            {

                        return $some_data;

            }

В данном случае переменная $ some _ data существует только в пакете и поэтому защищена от некорректного доступа. Использование пакета, таким образом, обес­печивает данным ту же область видимости, что и в языке программирования С, где глобальные переменные имеют своей областью видимости тот файл исход­ных кодов, в котором они объявлены. При вызове подпрограммы из другого фай­ла скриптов необходимо использовать имя пакета:

require ‘some_package.pl’;

print &some_package_name’some_sub;

Назад | Оглавление | Далее