Есть ли способ сделать сборку perl неудачной, если ключ хеша не был определен в первоначальном определении хеша? - PullRequest
4 голосов
/ 04 октября 2011

Все используемые ключи должны присутствовать в исходном определении хеша%.

use strict;
my %hash = ('key1' => 'abcd', 'key2' => 'efgh');
$hash{'key3'} = '1234'; ## <== I'd like for these to fail at compilation. 
$hash{'key4'}; ## <== I'd like for these to fail at compilation.

Есть ли способ сделать это?

Ответы [ 3 ]

8 голосов
/ 04 октября 2011

Модуль 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.
5 голосов
/ 04 октября 2011

Tie :: StrictHash умирает при попытке назначить новый ключ хеша, но делает это во время выполнения, а не во время компиляции.

0 голосов
/ 04 октября 2011
use strict; 
my %hash = ('key1' => 'abcd', 'key2' => 'efgh'); 
my $ke = 'key3';
if (!exists $hash{$ke}) {
exit;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...