Perl 催化剂MVC下的反常推送行为

Perl 催化剂MVC下的反常推送行为,perl,catalyst,Perl,Catalyst,我希望有以下代码 my @array; for my $rapport ( qw( value1 value2 value3 ) ) { push @array, { key => $rapport }; } 制作: $VAR1 = [ { 'key' => 'value1' }, { 'key' => 'value2' }, { 'key' => 'va

我希望有以下代码

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次,我假设其他一些用户也遇到过此问题?

此代码示例

#!/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中,您通常通过隐藏或类似构造通过应用程序传递各种值,因此您可以检查数组是否真的包含标量值:)

如果我太傻了,请原谅。你是说在Catalyst MVC下运行?perl版本?另外,如果您尝试使用我的$rapport(@{['value1','value2'..]),会发生什么。似乎$rapport被分配了[value1,value2,value3]的arrayref,循环只执行一次。这意味着推动不是罪魁祸首。米克尔,我对你的评论投了赞成票。你的假设可能是正确的。我现在无法重现这一点,因为同时更改了代码。我很想知道为什么这个问题被高估了3次…每个人都喜欢一个好的谜团?deviolog,我想你可能知道一些事情。正如我在我的帖子中提到的,我已经没有代码了,所以我无法重现这个问题。不过你的假设似乎很合理。因为没有其他答案,我会接受这个答案。