http://qs1969.pair.com?node_id=177576

c has asked for the wisdom of the Perl Monks concerning the following question:

I'm back to adding features in a script that I've been hacking on for quite a while now that deals with net::snmp. The module has a few method that use the standard format of $object->method(-argument => $value);

Since a method can have quite a number of -argment options passed to it at once, is there a method of passing them to the object through an array or an array reference? or perhaps I should be asking about passing them through a hash/hash reference. It seems as though I've read this as being a possibility with other modules, but I don't believe its present in net::snmp. Is this something that is module-specific or a standard that I can work on?

I guess my hypothesis is...

my %arguments = ( argument1 => "value1", argument2 => "value2" ); $object->method(%arguments);

Would equate to...

$object->method( -argument1 => "value1", -argument2 => "value2" );

Is this just wishful thinking?

thanks very much on this one -c

Replies are listed 'Best First'.
Re: pass Array/Hash reference to a module method?
by erikharrison (Deacon) on Jun 26, 2002 at 23:06 UTC

    In this kind of situation, your probably best to just try it out. :-). However, that it works and WHY it works is really neat (IMHO) so here is an explanation.

    The reason that we can have named argument passing of the kind that we're talking about here is because of how Perl passes args to it's subs. Perl flattens the argument list into one big long list, by expanding all arrays into one list. It does the same for hashes to (in fact, we used to call 'em associative arrays, because they're just arrays with funny indeces). The => operator is really just a fancy comma (it has some very minor magic which simply makes it DWIM in a very subtle way). The sub can assign this array of passed args to a hash (just as you can assign any list to a hash) the even elements becoming keys the odd ones becoming values. So, you pass in a hash the hash gets turned into a flat list, the list gets assigned to a hash again. Neat, eh?

    Cheers,
    Erik

    Light a man a fire, he's warm for a day. Catch a man on fire, and he's warm for the rest of his life. - Terry Pratchet