| Contents | Up | Previous | Next |
Hashes can be used to map a set of keys, each to his own value. Using a hash one can retrieve the value associated with each key, as well as get a list of all the keys present in the hash.
To assign or retrieve the value of the key $mykey in the hash $myhash one uses the $myhash{$mykey} convention. To check if a key exists in a hash one should type exists($myhash{$mykey}) which in turn returns a boolean value that indicates its existence.
An array whose elements are the keys present in the hash can be retrieved by typing keys(%myhash). Here's a short example, that runs a simple bank, that will illustrate this functionality:
# Initialize the valid operations collection
$ops{'create'} = 1;
$ops{'deposit'} = 1;
$ops{'status'} = 1;
$ops{'exit'} = 2;
while (1)
{
# Get a valid input from the user.
while (1)
{
print "Please enter what you want to do:\n";
print "(" . join(", ", keys(%ops)) . ")\n";
$function = <>;
chomp($function);
if (exists($ops{$function}))
{
last;
}
print "Unknown function!\n Please try again.\n\n"
}
if ($function eq "exit")
{
last;
}
print "Enter the name of the account:\n";
$account = <>;
chomp($account);
if ($function eq "create")
{
if (! exists($bank_accounts{$account}))
{
$bank_accounts{$account} = 0;
}
}
elsif ($function eq "status")
{
if (! exists ($bank_accounts{$account}) )
{
print "Error! The account does not exist.\n";
}
else
{
print "There are " . $bank_accounts{$account} .
" NIS in the account.\n";
}
}
elsif ($function eq "deposit")
{
if (exists($bank_accounts{$account}) )
{
print "How much do you wish to deposit?\n";
$how_much = <>;
chomp($how_much);
$bank_accounts{$account} += $how_much;
}
}
print "\n";
}
|
The following example, which is considerably shorter, uses a hash to find out if a list of strings contains only unique strings:
while($string = <>)
{
chomp($string);
if (exists($myhash{$string}))
{
print "The string \"" . $string . "\" was already encountered!";
last;
}
else
{
$myhash{$string} = 1;
}
}
|
| Contents | Up | Previous | Next |