如何将标量值(字符串)添加到 Perl 中的现有散列

How to add a scalar value (string) to an existing hash in Perl

我只想知道将一个值合并到一个散列中的过程是什么。 我有一个散列,它有 5 到 6 个键,具体取决于错误是否输出运行时值。接受参数的方法也首先接受错误消息字符串。我希望它能够将这个错误消息字符串添加到散列中,基本上形成一个大散列。

方法调用方式如下:

ASC::Builder::Error->new("Simple error message here", code => "UNABLE_TO_PING_SWITCH_ERROR", switch_ip => $ip3, timeout => $t1);

这是我操作错误散列和构造消息的方法

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 的输出应该是 _merge_hashes 的输入 不确定我是否处理得当。这些方法将在新方法中使用(现在一团糟)因此不包括在内。

这只是我在 perlmonks 上看到的一个例子的尝试,下面是 link: http://www.perlmonks.org/?node_id=14263

我将从如何在 perl 中合并哈希的简单说明开始,它非常简单。

use strict;
use warnings;

use Data::Printer;

my (%a, %b, %c);

%a = (a => 1, b => 2);
%b = (a => 0, c => 3, d => 4);
%c = (%a, %b);

p(%c); # { a => 0, b => 2, c => 3, d => 4 }

您会注意到 a 键,如果有重复项,第二组中出现的任何值都将是 'wins'.

老实说,我不知道第二个函数在做什么,因为它引用的变量实际上并不存在于每一行中。 (创建一个也这样做,但只在几行上)。

根据你的描述,我认为你只想添加一个键,所以你并不需要这样做,你应该能够只将键添加到原始对象:$error->{messsage} = $message

但假设您确实想传递两个散列引用并合并它们,它看起来像这样:

sub merge {
    my ($first, $second) = @_;
    my %merged = (%$first, %$second);
    return bless \%merged, $class;
}