Yes, I should have clarified that it is a runtime error, but it is not a silent error. Thank you for bringing that up.
You understand perlguts far better than I, but there is a measurable penalty for interacting with a hash with locked keys:
#!/usr/bin/perl
use strict;
use warnings;
use 5.10.0;
use Hash::Util 'lock_keys';
use Benchmark 'cmpthese';
lock_keys my %hash1, qw/foo bar baz/;
my %hash2;
cmpthese(1e2, {
'lock' => sub { for (1 .. 1e5) {$hash1{foo}++;$hash1{bar}++;$
+hash1{baz}++;} },
'no_lock' => sub { for (1 .. 1e5) {$hash2{foo}++;$hash2{bar}++;$
+hash2{baz}++;} },
});
yields
Rate lock no_lock
lock 61.6/s -- -8%
no_lock 66.8/s 8% --
#11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.