2009/12/9 John W. Krahn <[email protected]>:
> Jeff Pang wrote:
>>
>> Noah:
>>>
>>> sub exiting {
>>> my ($hostname, %login) = @_;
>>
>> Passing arguments like this has no such problem.
>> But you'd better pass the hash as a reference to the subroutine.
>>
>> exitint($hostname, \%login);
>>
>> sub exiting {
>> my $hostname = shift;
>> my %login = %{+shift};
>
> What is the point of passing a reference if you are just going to copy the
> whole hash anyway (which is what the OP was doing)?
One possible reason is that if you later want to add a new, optional
parameter to the subroutine, you can do this without modifying the
existing interface (and therefore modifying all code which calls
exiting):
sub exiting {
my $hostname = shift;
my %login = %{+shift};
my $optional = shift // $default_value; # use || before 5.10 and be careful
# ...
}
This isn't possible if you are passing the hash as a list:
sub exiting {
my ($hostname, %login) = @_;
my $optional = ??? # whoops, we've used all arguments already
}
I'd therefore argue that passing a hashref is more maintainable.
Phil
--
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
http://learn.perl.org/