in reply to (FIRST|NEXT)KEY in context

Yes, they are (and should be) always called in scalar context, and should just return the key.

Starting with 5.8.3, FIRSTKEY may also be called by scalar(%tiedhash) if there is no SCALAR method. See perl583delta, and the perltie.pod from 5.8.3.

Good, I see you have an explicit iterator reset (though with an unneeded my $a =) in your FIRSTKEY. That's necessary, because it's up to perl to keep track of whether FIRSTKEY or NEXTKEY should be called. When keys %tiedhash is used in a void context, for instance, no tie method will be invoked; perl just reset's its iterator, so a subsequent call to each will use FIRSTKEY. But it's up to your class to maintain an iterator also, so that NEXTKEY will return the appropriate value.