Модуль Hash :: Util является частью Perl с 5.8.0.И это включает в себя функцию «lock_keys», которая позволяет реализовать то, что вы хотите.Выдает ошибку времени выполнения (не времени компиляции), если вы пытаетесь добавить ключ к хешу.
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use Hash::Util 'lock_keys';
my %hash = (key1 => 'abcd', key2 => 'efgh');
lock_keys(%hash);
$hash{key3} = '1234'; ## <== I'd like for these to fail at compilation.
say $hash{key4}; ## <== I'd like for these to fail at compilation.