2013-10-08 4 views
5

я ожидал бы следующий кодАномальное толчок поведение при Catalyst MVC

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' ] 
      }, 
     ]; 

Может кто-нибудь объяснить мне почему?

EDIT: может ли кто-нибудь с тем же вопросом добавить пример? Я не могу воспроизвести после некоторых изменений кода, но, поскольку он был одобрен 5 раз, я предполагаю, что некоторые другие пользователи также столкнулись с этой проблемой?

+0

Извините, если я устал. Вы имеете в виду под управлением Catalyst MVC? Perl версия? – mikew

+2

Также, если вы попытаетесь выполнить мой $ rapport (@ {['value1', 'value2' ..]}). Похоже, что $ rapport получает назначенный arrayref из [value1, value2, value3], и цикл выполняется только один раз. Это означало бы, что толчок не является виновником. – mikew

+0

mikew, я одобрил ваш комментарий. Вероятно, ваше предположение верно. Я не могу воспроизвести это сейчас, тем самым изменив код. Мне интересно узнать, почему вопрос был поднят 3 раза, хотя ... –

ответ

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 или аналогичные конструкции, вы можете проверить погоду, что ваш массив действительно содержит скалярные значения:)

+0

deviolog, я думаю, вы можете быть на что-то. Как я упоминал в своем посте, у меня больше нет кода, поэтому я не могу воспроизвести проблему. Однако ваша гипотеза кажется очень разумной. Поскольку нет других ответов, я соглашусь с этим. –

Смежные вопросы