Catalyst MVC下的异常推送行为

Mau*_*sen 5 perl catalyst

我希望以下代码

my @array;
for my $rapport ( qw( value1 value2 value3 ) ) {
    push @array, { key => $rapport };
}
Run Code Online (Sandbox Code Playgroud)

生产:

$VAR1 = [
      {
        'key' => 'value1'
      },
      {
        'key' => 'value2'
      },
      {
        'key' => 'value3'
      }
    ];
Run Code Online (Sandbox Code Playgroud)

但是,在Catalyst MVC下运行此代码段我得到:

$VAR1 = [
          {
            'key' => [ 'value', 'value2', 'value3' ]
          },
        ];
Run Code Online (Sandbox Code Playgroud)

有人可以向我解释原因吗?

编辑:任何有相同问题的人都可以添加一个例子吗?在一些代码更改之后我无法重现,但是由于它被推崇了5次我假设其他一些用户也遇到过这个问题?

小智 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;
Run Code Online (Sandbox Code Playgroud)

产生...

$VAR1 = [
          {
            'key' => 'var1'
          },
          {
            'key' => 'var2'
          },
          {
            'key' => 'var3'
          }
        ];
Run Code Online (Sandbox Code Playgroud)

但以下...

#!/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;
Run Code Online (Sandbox Code Playgroud)

显示...

$VAR1 = [
          {
            'key' => [
                       'var1',
                       'var2',
                       'var3'
                     ]
          }
        ];
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,两个示例都循环遍历数组,但第二个是一个数组,它是用引用值初始化的。由于在 Catalyst 中,您通常通过存储或类似结构通过应用程序传送各种值,因此您可以检查数组是否确实包含标量值:)