我在创建带有带有地图的数组的地图时遇到了一些问题。解释起来有点复杂,但似乎应该很容易做到。但是,我到处都有问题。很明显,我是一个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;
在标量上下文中,数组返回其大小,而不是其元素。