l i n u x - u s e r s - g r o u p - o f - d a v i s
L U G O D
 
Next Meeting:
April 21: Google Glass
Next Installfest:
TBD
Latest News:
Mar. 18: Google Glass at LUGOD's April meeting
Page last updated:
2004 Jun 24 19:36

The following is an archive of a post made to our 'vox-tech mailing list' by one of its subscribers.

Report this post as spam:

(Enter your email address)
Re: [vox-tech] perl: function with hash and scalar args
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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



On Thu, Jun 24, 2004 at 02:46:39PM -0700, Peter Jay Salzman wrote:
> i have a function which takes a hash and scalar arg.  how is this done
> correctly?  why is $scalar undefined at the print statement in
> function()?
> 
> 
> #!/usr/bin/perl
> use strict;
> use diagnostics;
> 
> sub function(%$)
> {
>    my (%hash, $scalar) = (shift, shift);
> 
>    print "hash: $hash{foo}\n";
>    print "scalar: $scalar\n";
> }
> 
> my (%hash, $scalar);
> 
> $hash{foo} = "hello";
> $scalar    = "goodbye";
> 
> function(%hash, $scalar);

I believe you need to pass your hash by reference if you want to do
this.  The way you're calling the function above is basically the same
as doing:

    function("foo", "hello", "goodbye");
    
And then when you try to shift the hash off the stack, it tries to be
greedy and take 'goodbye' as another key to the hash.

I think what you need to do is pass the hash by reference, when you call
the function, i.e.

    function(\%hash, $scalar);

shift the hash off the parameter array as a reference (scalar):
       
       my ($hash, $scalar) = (shift, shift);

and dereference when actually doing the hash lookup:

       print "hash: $$hash{foo}\n";


Hope that helps.


Matt

-- 

*************************************************
* Matt Roper <matt@mattrope.com>                *
* http://www.mattrope.com                       *
* PGP Key: http://www.mattrope.com/mattrope.asc *
*************************************************
_______________________________________________
vox-tech mailing list
vox-tech@lists.lugod.org
http://lists.lugod.org/mailman/listinfo/vox-tech



LinkedIn
LUGOD Group on LinkedIn
Sign up for LUGOD event announcements
Your email address:
facebook
LUGOD Group on Facebook
'Like' LUGOD on Facebook:

Hosting provided by:
Sunset Systems
Sunset Systems offers preconfigured Linux systems, remote system administration and custom software development.

LUGOD: Linux Users' Group of Davis
PO Box 2082, Davis, CA 95617
Contact Us

LUGOD is a 501(c)7 non-profit organization
based in Davis, California
and serving the Sacramento area.
"Linux" is a trademark of Linus Torvalds.

Sponsored in part by:
Sunset Systems
Who graciously hosts our website & mailing lists!