我在使用带有地图的数组的地图创建地图时遇到了一些问题。它的解释很复杂,但看起来应该很容易。但是,我到处都遇到了问题。我很清楚我是一个人。
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中的第一行。
我已经尝试了几种不同的方法来访问这些内容,但它们都给了我错误,这些错误本质上告诉我,我没有找到哈希,我正在寻找一个。
感谢您的帮助。
答案 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
}