値をハッシュにマージすることの背後にあるプロセスを知りたいだけです。 エラーが実行時の値を出力するかどうかによって、5〜6個のキーを持つハッシュがあります。引数を取り込むメソッドも、最初にエラーメッセージ文字列を取ります。私はそれが基本的に1つの大きなハッシュを作るために、このエラーメッセージ文字列をハッシュに追加できるようにしたい。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', } };
は_create_hash
の出力があるべきエラーハッシュを操作し、メッセージ
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;
}
を構築するための私の方法であり、 _merge_hashes
の入力 これを正しく処理したかどうかわかりません。これらのメソッドは新しいメソッドの中で使用されます(これは今や混乱です)。なぜそれが含まれていないのですか?私はperlmonksで見られる例のちょうど試み、だ
は、ここにリンクされています、それはかなり簡単な http://www.perlmonks.org/?node_id=14263
ちょうど注意してください - コンストラクタが適切なオブジェクトを返すようにして、 'new'メソッドが返されるようにしておいてください'bless'-ed refを使用して、呼び出しコードに適切な作業ができるようにします。通常、 'return bless $ self、$ class'を行うのは' new'です。そのメソッドの中で、クラスの中で、あなたはもちろん、他のsubsを呼び出して仕事を整理することができます。 – zdim