Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

Re: Subroutines: Returning a hash vs. hash reference

by demerphq (Chancellor)
on Nov 28, 2002 at 09:39 UTC ( #216266=note: print w/replies, xml ) Need Help??


in reply to Subroutines: Returning a hash vs. hash reference

My question to you wise and wonderful monks is whether I should return a hash or a hash reference.

Why lock your users into only one option? Thats not the perl way to do things.

If their code makes more sense with a ref then give them one, if it makes more sense to get a list of key=>value pairs then give it to them.

I avoid the term "to get a hash" as there is no way to return a hash from a subroutine. Instead the hash must be listified into key=>value pairs and then returned that way. Its up to the user to shove that list into an actual hash (or not).

And since this approach involves returning a list then good old perlfunc:wantarray comes to the rescue:

sub get_params { my $self = shift; my %input; $input{$_} = $self->{$cgi_handle}->param($_) foreach $self->{$cgi_handle}->param()); # we return a hashref if the user calls us in scalar context # or a list of key=>values pairs if they call us in list context. return wantarray ? %input : \%input; }
Incidentally this is a standard idiom that can come in very useful. Consider the behaviour of localtime(). You could even insert the following before the return statement
die "get_params in void context:".Dumper(\%input) unless defined wan +tarray;
to provide a debugging behaviour for when the sub is called in void context.

HTH

--- demerphq
my friends call me, usually because I'm late....

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://216266]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2022-09-29 23:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    I prefer my indexes to start at:




    Results (125 votes). Check out past polls.

    Notices?