2013-10-08 153 views
5

異常推行爲我希望下面的代碼下催化劑MVC

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

產生:

$VAR1 = [ 
     { 
     'key' => 'value1' 
     }, 
     { 
     'key' => 'value2' 
     }, 
     { 
     'key' => 'value3' 
     } 
    ]; 

然而,在催化劑MVC運行該代碼段,我得到:

$VAR1 = [ 
      { 
      'key' => [ 'value', 'value2', 'value3' ] 
      }, 
     ]; 

有人可以向我解釋爲什麼?

編輯:任何人都可以有同樣的問題請添加一個例子嗎?我在代碼更改後無法再現,但由於它已被提升5次,我認爲其他用戶也遇到過這個問題?

+0

對不起,如果我是傻子。你的意思是在Catalyst MVC下運行? perl版本? – mikew

+2

此外,如果您嘗試我的$貼現(@ {['value1','value2'..]}),會發生什麼情況。看起來$ rapport正在被分配一個[value1,value2,value3]的arrayref,並且循環只執行一次。這意味着推動不是罪魁禍首。 – mikew

+0

mikew,我已upvoted您的評論。你的假設可能是正確的。現在我無法重現這一點,並在此期間更改了代碼。我有興趣知道爲什麼問題被upvoted 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中,通常通過存儲或類似構造通過應用程序發送各種值,因此您可以檢查天氣情況,您的陣列是否包含標量值:)

+0

偏差,我認爲你可能會做些什麼。正如我在文章中提到的,我不再有代碼,因此我無法再現問題。儘管你的假設看起來非常合理。由於沒有其他答案,我會接受這一個。 –