in reply to {} vs {()}

You are creating two hash references which refer to empty hash arrays. There is no such thing as an undefined hash reference. Maybe you could do one or more of:
{ this_rule=>'some value' } # These rules {} # no rules 0 or undef # no rules (! UNIVERSAL::isa($var, 'HASH') and false) { all_rules=>1 } #all rules 1 # all rules ( ! UNIVERSAL::isa($var, 'HASH') and true)