in reply to Re: Re: Returning multiple values from a function
in thread Returning multiple values from a function
Be careful about what you pass around, and what you return. As others already said, your parameter list gets flattened out into a list. If you return a hash, the hash gets flattened out, but if you accept the results of the call back into hash, then you are all right. NOTE: This all changes if you have a hash as one of many parameters that you are passing to a subroutine, or returning from a subroutine. If you are passing mixed parameters (scalars, lists, hashs), then your subroutine can get confused.
The safest way to pass (or return) arrays and hashes is by reference. This keeps your parameter list all scalars, since a reference is a scalar.
Sorry, now that I've preview'd my response, I can't see what your next question was.sub test { my $scalar1 = shift; my $array2_ref = shift; my $hash3_ref = shift; ### if you want to work with the hash, and not just ### the hash reference, then dereference the ref. my %hash3 = %$hash3_ref; print "value for hash key 'one' is $hash3{'one'}\n"; ### I prefer to just use the reference instead, and ### not create the hash by dereferencing the hash ref. print "value for hash key 'one' is $hash3_ref->{'one'}\n"; return($scalar1, $array2_ref, $hash3_ref); } my $test_scalar = "abc"; my @test_array = ( "a", "b", "c" ); my %test_hash = ( "a" => 1, "b" => 2, "c" => 3 ); ($new_scalar, $new_arrayref, $new_hashref) = test($test_scalar, \@test +_array, \%test_hash);
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Re: Re: Re: Returning multiple values from a function
by Grygonos (Chaplain) on Sep 03, 2003 at 20:37 UTC | |
by castaway (Parson) on Sep 04, 2003 at 07:35 UTC |