Как улучшить использование lock_keys в Perl? - PullRequest
3 голосов
/ 16 сентября 2010

Я использую Hash::Util lock_keys, чтобы умереть при попытке доступа к несуществующему ключу в хэше.

  1. Иногда мои хэши глубоки (хэш хешей хешей ...). Есть ли быстрый способ заблокировать их все сразу?

  2. Можно ли контролировать сообщение по умолчанию при сбое (т.е. добавить дамп хеша, в котором ключ не найден)

Ответы [ 2 ]

1 голос
/ 16 сентября 2010

Вопрос 2 возможен, но вы по прихоти автора (ов) Hash :: Util:

#!/usr/bin/perl

use strict;
use warnings;

use Hash::Util qw/lock_keys/;

$SIG{__DIE__} = sub {
    my $message = shift;
    return unless my ($key, $file, $line) = $message =~ m{
        Attempt [ ] to [ ] access [ ] disallowed [ ] key [ ] '(.*?)'
        [ ] in [ ] a [ ] restricted [ ] hash [ ] at [ ] (.*?) [ ]
        line [ ] (.*?).
    }x;
    die "$key doesn't exist at $file line $line.\n";
};

my %h = map { $_ => undef } "a" .. "z";
lock_keys %h;

my $s = $h{4};
1 голос
/ 16 сентября 2010
  1. lock_hash_recurse

  2. Перехватите исключение, затем сбросьте, как хотите, и отбросьте.


use Try::Tiny;
try {
    $hash{key} = 123; # illegal modification
} catch {
    use DDS; DumpLex \%hash;
    die $_;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...