Как передаются параметры модуля perl при его использовании?
Вот пример того, что я имею в виду
use SOAP::Lite +trace => [ qw( debug ) ];
Итак, что такое +trace
в SOAP:: Lite? Я предполагаю, что это часть хэша с охватом пакетов? Я имею в виду, если бы я хотел реализовать аналогичный синтаксис в одном из моих модулей, как бы я это сделал?
Как это будет работать, если мне также понадобится импортировать символы, например.
use Foo qw( some_function );
Будет ли это работать?
use Foo qw( some_function ) +option => 'bar';
нужна ли какая-либо дополнительная магия в модуле, который позволяет передавать такие вещи?
Примечание: не уверен, что мне нравится название вопроса, не стесняйтесь переделывать
Ответы
Ответ 1
Когда вы выполняете use Foo @args
, то, что происходит за кулисами, эквивалентно этому:
BEGIN {
require 'Foo.pm';
Foo->import( @args );
};
Итак, в этом случае use SOAP::Lite +trace => [ qw( debug ) ]
превращается в вызов import
следующим образом:
SOAP::Lite->import( '+trace' => [ 'debug' ] );
Точно как один реализует подпрограмму import
до автора модуля. Большинство модулей используют стандартный import
, предоставляемый Exporter
, но вы можете поместить все, что хотите, и оно будет выполнено в use
.