创建 perl 哈希数组



我在创建带有带有地图的数组的地图时遇到了一些问题。解释起来有点复杂,但似乎应该很容易做到。但是,我到处都有问题。很明显,我是一个perl-tard。

sub test_arg_maps {
  my %test_args;
  $test_args{"post_1"}{post} = q({"template_name": "unnamed_template_1", "template_subject":"unnamed_subject_1", "template_body":"body_1"});
  $test_args{"post_1"}{user} = q(x-idm test:u0@client1.com);
  $test_args{"post_1"}{save} = q(post_1);
  $test_args{"get_1"}{user} = q(x-idm test:u0@client1.com);
  $test_args{"get_1"}{save} = q(u0_template_get_1);
  $test_args{"u0_1"}{user}  = q(x-idm test:u0@client1.com);
  my @param_array = ();
  push(@param_array, (parameters => q(filter={"query":[]}), save => q(empty_filter)));
  push(@param_array, (parameters => q(filter={"query":[{"and":[]}]}), save => q(just_and)));
  $test_args{"u0_1"}{params} = @param_array;
  return %test_args;
}

使用此函数的代码是:

my %test_args = test_arg_maps();
my @u0_1_array = $test_args{"u0_1"}{params};
for my $i (@u0_1_array)
{
    my %param_map = %{$i}; ## LINE 63
    $http->run(qq(
        /v1/template.aspx?$param_map{"parameters"}  -   Reject  $test_args{"u0_1"}{user}    ( callback => [qw(save_page $param_map{"save"} $self->filter_json)]);
    ));
}

我得到的错误是:

ERROR at SIT::Harness (line 73): Can't use string ("4") as a HASH ref while "strict refs" in use at test.pl line 63.

编辑:我已经在上面标记了第 63 行,它是 for 块中的第一行。

我已经尝试了几种不同的方法来访问这些东西,但它们都给了我错误,这些错误基本上告诉我我没有我正在寻找的哈希。

感谢您的帮助。

@param_array应该是哈希引用数组,

push @param_array, {parameters => q(filter={"query":[]}), save => q(empty_filter)};
push @param_array, {parameters => q(filter={"query":[{"and":[]}]}), save => q(just_and)};
$test_args{"u0_1"}{params} = @param_array;

$test_args{"u0_1"}{params}是对数组的引用,

my $u0_1_array = $test_args{"u0_1"}{params};
for my $i (@$u0_1_array) {
  my %param_map = %{$i}; ## LINE 63
}

这一行:

$test_args{"u0_1"}{params} = @param_array;

是将数组的大小分配给该键,而不是数组本身。为此,您需要使用引用:

$test_args{"u0_1"}{params} = @param_array;

在标量上下文中,数组返回其大小,而不是其元素。

最新更新