Actually, I did mean values and not hash keys.
Here is an example of how boolean false values would defeat our intent to short-cut at the first match:
my %access = ('foo' => 0, 'bar' => 123);
print $access{'foo'} || $access{'bar'}; # prints 123
The key 'foo' exists but the zero score makes perl evaluate the second operand, too.
With perl version 5.10.0 and up, the defined-or operator can help, as it short-cuts only on
undef:
my %access = ('foo' => 0, 'bar' => 123);
print $access{'foo'} // $access{'bar'}; # prints 0
Older perls don't have this operator, however.