Ich möchte nur wissen, was der Prozess hinter dem Zusammenführen eines Wertes in einen Hash ist. Ich habe einen Hash, der 5 bis 6 Schlüssel hat, abhängig davon, ob der Fehler Laufzeitwerte ausgibt. Die Methode, die die Argumente annimmt, nimmt auch zuerst eine Fehlernachrichtenzeichenfolge an. Ich möchte, dass es in der Lage ist, diese Fehlermeldung Zeichenfolge in den Hash hinzuzufügen, um einen großen Hash im Grunde zu machen.Wie man einen skalaren Wert (String) zu einem vorhandenen Hash in Perl hinzufügt
Dies ist, wie die Methode aufgerufen werden würde:
ASC::Builder::Error->new("Simple error message here", code => "UNABLE_TO_PING_SWITCH_ERROR", switch_ip => $ip3, timeout => $t1);
- Die letzten zwei Werte der Laufzeit-Parameter/Werte Schlüssel innerhalb des Kontextschlüssel in dem Fehler Hash zuweisen.
Hier ist ein Blick auf die Fehler hash:
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', } };
Hier ist meine Methode, um den Fehler Hash und konstruieren die Nachricht
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;
}
Der Ausgang des _create_hash
sollte der sein, zu manipulieren Eingabe für _merge_hashes
Nicht sicher, ob ich das richtig gehandhabt habe. Diese Methoden werden in der neuen Methode verwendet (was momentan ein Chaos ist) und deshalb nicht enthalten ist.
Das ist nur ein Versuch, ein Beispiel, das ich auf PerlMonks gesehen, ist hier der Link: http://www.perlmonks.org/?node_id=14263
Nur ein Hinweis - denken Sie daran, dass Sie der Konstruktor will ein richtiges Objekt zurück, so dass die 'new' Methode sollte zurückkehren ein "bless-ed ref", damit der aufrufende Code richtig funktioniert. Normalerweise ist es "neu", das "segne $ self, $ class" zurückbringt. Innerhalb dieser Klasse können Sie innerhalb der Klasse natürlich andere Subs anrufen, um die Arbeit zu organisieren. – zdim