我希望以下代码
my @array;
for my $rapport ( qw( value1 value2 value3 ) ) {
push @array, { key => $rapport };
}
生产:
$VAR1 = [
{
'key' => 'value1'
},
{
'key' => 'value2'
},
{
'key' => 'value3'
}
];
但是,在Catalyst MVC下运行此代码段我得到:
$VAR1 = [
{
'key' => [ 'value', 'value2', 'value3' ]
},
];
有人可以向我解释原因吗?
编辑:任何有相同问题的人都可以添加一个示例吗?在一些代码更改之后我无法重现,但是由于它被推崇了5次,我假设其他一些用户也遇到过这个问题?
答案 0 :(得分:1)
此代码示例...
#!/usr/bin/perl
use Data::Dumper;
my @input = ( "var1", "var2", "var3" );
my @array;
for my $rapport ( @input ) {
push @array, { key => $rapport };
}
print Dumper( \@array );
exit;
产生......
$VAR1 = [
{
'key' => 'var1'
},
{
'key' => 'var2'
},
{
'key' => 'var3'
}
];
但以下......
#!/usr/bin/perl
use Data::Dumper;
my @input = [ "var1", "var2", "var3" ]; # sometimes people forget to dereference their variables
my @array;
for my $rapport ( @input ) {
push @array, { key => $rapport };
}
print Dumper( \@array );
exit;
显示......
$VAR1 = [
{
'key' => [
'var1',
'var2',
'var3'
]
}
];
正如您所看到的,两个示例都循环遍历数组,但第二个示例是一个数组,该数组是使用引用值初始化的。因为在Catalyst中你通常通过你的应用程序通过隐藏或类似的结构发送各种值,你可以检查天气你的数组真的包含标量值:)