in reply to foreach keys possible using a hash reference?

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