The rule on what the syntax is when dealing with references
is very simple. Wherever you use something of the form
sigil followed by the name of a variable (scalar,
hash, array, subroutine), you may replace the name of the
variable with a block whose result is a reference to the
appropriate type.
So, where you normally would write
keys %hash
you now replace
hash with a block returning
a reference to a hash, and you get:
keys %{$hashref}
The block has a very, very simple statement, the statement
is just an expression consisting of a single variable.
As an extra feature, in such a simple expression, you may
omit the braces, so you will end up with:
keys %$hashref
Abigail