xenoterracide
xenoterracide

Reputation: 16837

How does passing parameters to a perl module when using it work?

Here's an example of what I mean

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

So what is +trace in SOAP::Lite? I'm guessing it is part of a package scoped hash? I mean if I wanted to implement similar syntax into one of my modules how would I do it?

How would this work if I also needed to import symbols, e.g.

use Foo qw( some_function );

Would this work?

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

would any additional magic be needed in the module that allows you to pass things like this?

note: not sure I like the title of the question, feel free to reword

Upvotes: 10

Views: 929

Answers (1)

friedo
friedo

Reputation: 66968

When you do use Foo @args, what happens behind the scenes is equivalent to this:

BEGIN { 
    require 'Foo.pm';
    Foo->import( @args );
};

So in this case, use SOAP::Lite +trace => [ qw( debug ) ] gets turned into an import call like this:

SOAP::Lite->import( '+trace' => [ 'debug' ] );

Precisely how one implements the import routine is up to the module author. Most modules use the standard import provided by Exporter, but you can put anything you want there and it will be executed at use time.

Upvotes: 12

Related Questions