in reply to Is it possible to control scalar(%h) when %h is a tied hash?

If you're pre-5.8, you could overload KEYS using wantarray to determine context. So, you would do if ( keys %$ref) { ... } and it would do the right thing.

Of course, if your code is exactly like:

if (%$ref) { while ( my ($k, $v) = each %$ref ) { ... } }
You could remove the if-check because the while-loop will never execute; it will encounter a false condition on the first check.

You cannot do this logical refactoring if you have any code before or after the while-loop.

Being right, does not endow the right to be rude; politeness costs nothing.
Being unknowing, is not the same as being stupid.
Expressing a contrary opinion, whether to the individual or the group, is more often a sign of deeper thought than of cantankerous belligerence.
Do not mistake your goals as the only goals; your opinion as the only opinion; your confidence as correctness. Saying you know better is not the same as explaining you know better.