创建perl哈希数组

时间:2014-11-18 17:39:30

标签: perl

我在使用带有地图的数组的地图创建地图时遇到了一些问题。它的解释很复杂,但看起来应该很容易。但是,我到处都遇到了问题。我很清楚我是一个人。

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 block中的第一行。

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

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

这一行:

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

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

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

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

答案 1 :(得分:1)

@param_array应该是hashrefs数组,

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
}