Я просто хочу знать, что происходит за слиянием значения в хэш. У меня есть хеш, который имеет от 5 до 6 ключей в зависимости от того, выводит ли ошибка значения времени выполнения. Метод, который принимает аргументы, также принимает строку с сообщением об ошибке. Я хочу, чтобы он мог добавить эту строку сообщения об ошибке в хэш, чтобы сделать один большой хеш в основном.Как добавить скалярное значение (string) к существующему хешу в Perl
Это как метод будет называться:
ASC::Builder::Error->new("Simple error message here", code => "UNABLE_TO_PING_SWITCH_ERROR", switch_ip => $ip3, timeout => $t1);
- Последние два значения назначить параметры во время выполнения/значения ключей внутри ключа контекста в хэш ошибки.
Вот посмотрите на хэш ошибки:
use constant ERROR_CODE => { UNABLE_TO_PING_SWITCH_ERROR => { category => 'Connection Error', template => 'Could not ping switch %s in %s seconds.', context => [qw(switch_ip timeout)], tt => {template => 'disabled'}, fatal => 1, wiki_page => 'www.error-solution.com/ERROR_CODE_A', } };
Вот мой метод для манипулирования хэш ошибки и построить сообщение
sub _create_error_hash {
my $error_string = shift; if(defined($params{code}) {
my $first_param = delete $params{code};
foreach my $key (@{$first_param->{context}}) {
$first_param->{$key} = $key;
}
my @template_args = map { $first_param->{$_}} @{$first_param->{context} };
$first_param->{message} = sprintf($first_param->{template}, @template_args); }
return bless $first_param;
}
sub _merge_hashes {
my ($message = {message => $messsage}, $first_param = {first_param => $first_param}) = @ _;
#merge these two hashes and bless into $class (don't know how to merge hashes)
my %merged_hash = ($message, $first_param);
return bless $merged_hash, $class;
}
Выход _create_hash
должен быть input for _merge_hashes
Не уверен, что я правильно это обработал. Эти методы будут использоваться внутри нового метода (сейчас это беспорядок), поэтому он не включен.
Это просто попытка примера я видел на perlmonks, вот ссылка: http://www.perlmonks.org/?node_id=14263
Просто обратите внимание - помните, что вы хотите, чтобы конструктор вернуть правильный объект, поэтому 'new' метод должен возвращать «благословение», чтобы код вызова имел правильную работу. Обычно это 'new', который будет делать' return bless $ self, $ class'. Внутри этого метода, поэтому внутри класса, вы можете, конечно, называть другие подсистемы для организации работы. – zdim