在使用它时,如何将参数传递给perl模块?

xen*_*ide 10 perl

这是我的意思的一个例子

use SOAP::Lite +trace => [ qw( debug ) ];
Run Code Online (Sandbox Code Playgroud)

那么+traceSOAP :: Lite是什么?我猜它是包范围哈希的一部分?我的意思是,如果我想在我的一个模块中实现类似的语法,我该怎么做?

如果我还需要导入符号,这将如何工作,例如

use Foo qw( some_function );
Run Code Online (Sandbox Code Playgroud)

这会有用吗?

use Foo qw( some_function ) +option => 'bar';
Run Code Online (Sandbox Code Playgroud)

模块中是否需要任何额外的魔法才能传递这样的东西?

注意:不确定我喜欢问题的标题,随意改写

fri*_*edo 12

当你这样做时use Foo @args,幕后发生的事情等同于:

BEGIN { 
    require 'Foo.pm';
    Foo->import( @args );
};
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,use SOAP::Lite +trace => [ qw( debug ) ]变成这样的import调用:

SOAP::Lite->import( '+trace' => [ 'debug' ] );
Run Code Online (Sandbox Code Playgroud)

确切地说,如何实现import例程取决于模块作者.大多数模块都使用由标准import提供的标准Exporter,但是你可以在那里放置任何你需要的东西,它会在use时间执行.

  • 通过这种理解,您可以尝试理解SOAP :: Lite :: import()的源代码. (2认同)