5

我希望下面的代码

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 次,我认为其他一些用户也遇到过这个问题?

4

1 回答 1

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

于 2013-12-17T22:53:51.213 回答