[vox-tech] perl: function with hash and scalar args

Jay Strauss me at heyjay.com
Thu Jun 24 19:35:30 PDT 2004


> this clears up another mystery for me.  perl was complaining about an
> "odd number of elements in the hash" (in my real code).  now i understand
> why (although i'm at a loss why i didn't get the same "odd number of
> hash element" message in the test code i posted).
> 
> after changing my (real) code, everything works.  i had momentary
> confusion when i was able to "dereference" the hash with $hash{foo}
> instead of $$hashref{foo}, but then i realized that my hash was declared
> outside of any functions, and so was global (which is exactly what i'm
> changing right now and got me in trouble with argument lists).
> 
> thanks for you help!
> 

For the sake of TMTOWTDIness

I'll suggest one more way.  Switch the order of the args like:

{
    my $scalar = "stuff";
    my %hash = (key1=>'stuff1', key2=>'stuff2')
    somefunc($scalar, %hash);
}

sub somefunc{
    my $scalar = shift;
    my %hash = @_;

    #do stuff with hash
}

If you're not a speed freak, and you know the number of args isn't 
going to be changing, then you don't have to use a reference

Jay


More information about the vox-tech mailing list