keys 
keysHASHkeysARRAYkeysEXPR
This function returns a list consisting of all keys in the
indicated HASH. The keys are returned in an
apparently random order, but it is the same order produced by either the
values or each function (assuming the hash has not been
modified between calls). As a side effect, it resets
HASH’s iterator. Here is a (rather
cork-brained) way to print your environment:
@keys = keys %ENV; # keys are in the same order as
@values = values %ENV; # values, as this demonstrates
while (@keys) {
say pop(@keys), "=", pop(@values);
}You’re more likely to want to see the environment sorted by keys:
for my $key (sort keys %ENV) {
say $key, "=", $ENV{$key};
}You can sort the values of a hash directly, but that’s somewhat
useless in the absence of any way to map values back to keys. To sort a
hash by value, you generally need to sort the keys by providing a comparison function that
accesses the values based on the keys. Here’s a descending numeric sort
of a hash by its values:
for my $key (sort { $hash{$b} <=> $hash{$a} } keys %hash) {
printf "%4d %s\n", $hash{$key}, $key;
}Using keys on a hash bound to a
largish DBM file will produce a largish list, causing you to have a
largish process. You might prefer to use the each function here, which will iterate over
the hash entries one by one without slurping them all into a single
gargantuan list.
In scalar context, keys returns ...
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