Использование отдельных функций модуля

Предположим, при включении в существующую программу модуля File::Basename обнаружилось, что программа уже содержит пользовательскую функцию с именем &dirname (то есть имя существующей функции совпадает с именем одной из функций модуля). И здесь начинаются проблемы, потому что новая функция dirname тоже реализована в виде пользовательской функции Perl (внутри модуля). Что делать? Включите в объявлении use модуля File::Basename список импорта, в котором точно перечислены имена импортируемых функций. Директива импортирует только эти имена и никакие другие. Например, при следующем объявлении в программу из модуля включается только функция basename:

use File::Basename qw/ basename /;
А здесь никакие новые функции вообще не запрашиваются:
use File::Basename qw/ /;
Эта форма также часто записывается в следующем виде:
use File::Basename ();

Зачем это нужно? Эта директива приказывает Perl загрузить модуль File::Basename, как и прежде, но без импортирования имен функций. Импортирование позволяет нам использовать короткие, простые имена типа basename и dirname. Даже если не импортировать имена, вы все равно сможете использовать функции, но для этого придется вызывать их с указанием полных имен:

use File::Basename qw/ /; # Не импортировать имена функций
my $betty = &dirname($wilma); # Используем собственную
# функцию &dirname (код не показан)
my $name = "/usr/local/bin/perl";
my $dirname = File::Basename::dirname $name; # dirname из модуля

В последней строке функция dirname из модуля File::Basename вызывается по полному имени File::Basename::dirname.


Полное имя функции можно использовать всегда (после загрузки модуля, естественно) независимо от того, было импортировано короткое имя dirname или нет. Чаще всего используется список импорта по умолчанию, однако вы всегда можете заменить его своим собственным списком, чтобы отменить часть импорта по умолчанию. Другая возможная причина для определения собственного списка импорта – импортирование функций, не входящих в список по умолчанию. Некоторые модули определяют (редко используемые) функции, не включаемые в список импорта по умолчанию. Как нетрудно догадаться, некоторые модули по умолчанию импортируют больше символических имен по сравнению с другими. В каждой документации модуля должно быть четко указано, какие символические имена он импортирует (если они есть), но вы всегда можете переопределить список импорта по умолчанию, указав свой собственный список, как это было сделано для File::Basename. При передаче пустого списка символические имена не импортируются.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
CGI.pm
Базы данных и DBI
Использование простых модулей
Модуль File::Basename
Модуль File::Spec

Вернуться в раздел: Perl / 10. Модули Perl