Chapter 4. References and Scoping
References can be copied and passed around like any other scalar. At any given time, Perl knows the number of references to a particular data item. Perl can also create references to anonymous data structures (structures that do not have explicit names) and create references automatically as needed to fulfill certain kinds of operations. Let’s look at copying references and how it affects scoping and memory usage.
More than One Reference to Data
Chapter 3 explored how to take a reference to an
array @skipper and place it into a new scalar
variable:
my @skipper = qw(blue_shirt hat jacket preserver sunscreen); my $reference_to_skipper = \@skipper;
You can then copy the reference or take additional references, and they’d all refer to the same thing and be interchangeable:
my $second_reference_to_skipper = $reference_to_skipper; my $third_reference_to_skipper = \@skipper;
At this point, you have four different ways to access the data
contained in @skipper:
@skipper @$reference_to_skipper @$second_reference_to_skipper @$third_reference_to_skipper
Perl tracks how many ways the data can be accessed through a mechanism called reference counting. The original name counts as one, and each additional reference that was taken (including copies of references) also counts as one. The total number of references to the array of provisions is now four.
You can add and remove references as you wish, and as long as the reference count doesn’t hit zero, the array is maintained ...
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