Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

Tags:

perl

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

like image 400
xenoterracide Avatar asked Aug 08 '11 16:08

xenoterracide


1 Answers

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.

like image 152
friedo Avatar answered Sep 18 '22 17:09

friedo