How can I access the last Perl hash key without using a temporary array?

hash, perl

Solution

print( (keys %hash)[-1]);

Note that the extra parens are necessary to prevent syntax confusion with `print`'s param list.

You can also use this evil trick to force it into scalar context and do away with the extra parens:

print ~~(keys %hash)[-1];

Problem

How can I access the last element of keys in a hash without having to create a temporary array? I know that hashes are unordered. However, there are applications (like mine), in which my keys can be ordered using a simple `sort` call on the hash keys. Hope I've explained why I wanted this. The barney/elmo example is a bad choice, I admit, but it does have its applications. Consider the following: ``` my %hash = ( barney => 'dinosaur', elmo => 'monster' ); my @array = sort keys %hash; print $array[$#{$hash}]; #prints "elmo" ``` Any ideas on how to do this without calling on a temp (@array in this case)?

Original source