这是我的意思的一个例子
use SOAP::Lite +trace => [ qw( debug ) ];
那么SOAP :: Lite中的+trace
是什么?我猜它是包范围哈希的一部分?我的意思是,如果我想在我的一个模块中实现类似的语法,我该怎么做?
如果我还需要导入符号,例如
,这将如何工作?use Foo qw( some_function );
这会有用吗?
use Foo qw( some_function ) +option => 'bar';
模块中是否需要任何额外的魔法来传递这样的东西?
注意:不确定我喜欢问题的标题,随时改写
答案 0 :(得分:12)
当你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
时间执行。