Using References
References are absolutely essential for creating complex data structures. Since the next chapter is devoted solely to this topic, we will not say more here. This section lists the other advantages of Perl’s support for indirection and memory management.
Passing Arrays and Hashes to Subroutines
When you pass more than one
array or hash to a subroutine, Perl merges all of them into the
@_ array available within the subroutine. The only
way to avoid this merger is to pass references to the input arrays or
hashes. Here’s an example that adds elements of one array to
the corresponding elements of the other:
@array1 = (1, 2, 3); @array2 = (4, 5, 6, 7);
AddArrays (\@array1, \@array2); # Passing the arrays by reference.
print "@array1 \n";
sub AddArrays
{
my ($rarray1, $rarray2) = @_;
$len2 = @$rarray2; # Length of array2
for ($i = 0 ; $i < $len2 ; $i++) {
$rarray1->[$i] += $rarray2->[$i];
}
}In this example, two array references are passed to
AddArrays which then dereferences the two
references, determines the lengths of the arrays, and adds up the
individual array elements.
Performance Efficiency
Using references, you can efficiently pass large amounts of data to and from a subroutine.
However, passing references to scalars typically turns out not to be an optimization at all. I have often seen code like this, in which the programmer has intended to minimize copying while reading lines from a file:
while ($ref_line = GetNextLine()) { ..... ..... } sub GetNextLine () ...Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access