Как работает передача параметров в модуль Perl при его использовании? - PullRequest
10 голосов
/ 08 августа 2011

Вот пример того, что я имею в виду

use SOAP::Lite +trace => [ qw( debug ) ];

Так что же такое +trace в SOAP :: Lite?Я предполагаю, что это часть пакета хэша?Я имею в виду, если бы я хотел внедрить подобный синтаксис в один из моих модулей, как бы я это сделал?

Как бы это работало, если бы мне также нужно было импортировать символы, например,

use Foo qw( some_function );

Было бы эторабота?

use Foo qw( some_function ) +option => 'bar';

нужна ли какая-либо дополнительная магия в модуле, которая позволяет передавать такие вещи?

примечание: не уверен, что мне нравится название вопроса,не стесняйтесь перефразировать

1 Ответ

12 голосов
/ 08 августа 2011

Когда вы делаете 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 времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...