|
Who is this for
This article is for those who want
to learn how to use multi-dimensional hashes.
What you need to know
Basic Perl programming
specifically an understanding of hashes and references
Introduction
Perl hashes are data types that
allow you to associate data to a key. For example, a hash can
store article titles with the date of publication as the key:
%hash = (20030227 => 'Multi-dimensional hashes', 20030113 => 'Introduction to mod_perl', 20021201 => 'The CPAN Module' );
|
This is a one-dimensional
hash.
Two-Dimensional Hash
You can however, create
multi-dimensional hashes depending on your need. As in
multi-dimensional arrays, multi-dimensional hashes are created using
references. The references point to hashes.
In our example, if
we want to add say, author to the information, we cannot just add it
to the content of the hash item. The hash item is a scalar so it
contains only one information. If we want two information associated
with a key, we can have these information in a hash:
%info = (title=> 'Multi-dimensional hashes', author=> 'Philip Yuson' );
|
We can then refer to this hash in
the first hash item:
%hash2 = (20030227 => \%info);
|
When we do this, the data in
$hash2{20030227} contains the reference to the %info hash.
To access the title of that article, we can do this the long way:
$ref = $hash2{20030227}; # set $ref to the # reference pointing to # %info $ref->{title}; # get the data on the # title item of the %info hash.
|
We can shorten this to:
$hash2{20030227}->{title}; #
|
In this case, we remove the
intermediate step of saving the reference to %info to the $ref
variable. Perl also allows you to remove the pointer ->
In the example above, we have
only one key. What if you want to set more than one keys? You can
do this:
%info1 = (title=> 'Multi-dimensional hashes', author=>'Philip Yuson'); %info2 = (title=> 'Introduction to mod_perl', author=>'Philip Yuson'); %info3 = (title=>'The CPAN Module', author=>'Philip Yuson'); %hash3 = (20030227 =>\%info1, 20030113=>\%info2, 20021201=>\%info3); This is a bit awkward, so to simplify this: %hash3 = (20030227 => {title=> 'Multi-dimensional hashes', author=>'Philip Yuson'}, 20030113 => {title=> 'Introduction to mod_perl', author=>'Philip Yuson'}, 20021201 => {title=> 'The CPAN Module', author=>'Philip Yuson'} );
|
Multi-Dimensional Hashes
Based on the discussion, multi-dimensional hashes are made up of hashes that
refer to hashes that refer to hashes.
|