2013-10-08 13 views
5

Ich würde erwarten, den folgenden CodeAnomale Push-Verhalten unter Katalysator MVC

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

zu produzieren:

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

jedoch dieses Code-Segment unter Katalysator MVC laufe ich:

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

Kann mir bitte jemand erklären warum?

EDIT: könnte jemand mit dem gleichen Problem bitte ein Beispiel hinzufügen? Ich kann nicht nach einigen Codeänderungen reproduzieren, aber da es 5 mal upvoted wurde, nehme ich an, dass einige andere Benutzer dieses Problem ebenfalls erfahren haben?

+0

Tut mir leid, wenn ich dumm bin. Sie meinen, unter Catalyst MVC zu laufen? Perl-Version? – mikew

+2

Was passiert auch, wenn Sie meinen $ rapport (@ {['value1', 'value2' ..]}) versuchen. Es scheint, dass $ rapport eine Arrayref von [value1, value2, value3] zugewiesen bekommt und die Schleife nur einmal ausgeführt wird. Was bedeuten würde, dass der Push nicht der Schuldige ist. – mikew

+0

mikew, ich habe Ihren Kommentar upvoted. Ihre Annahme ist wahrscheinlich richtig. Ich kann das jetzt nicht reproduzieren, da ich den Code inzwischen geändert habe. Ich bin interessiert zu wissen, warum die Frage wurde 3 mal upvoted ... –

Antwort

1

Dieses Codebeispiel ...

#!/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; 

produziert ...

$VAR1 = [ 
      { 
      'key' => 'var1' 
      }, 
      { 
      'key' => 'var2' 
      }, 
      { 
      'key' => 'var3' 
      } 
     ]; 

Aber die folgende ...

#!/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; 

zeigt ...

$VAR1 = [ 
      { 
      'key' => [ 
         'var1', 
         'var2', 
         'var3' 
        ] 
      } 
     ]; 

Wie Sie sehen können, durchlaufen beide Beispiele ein Array, aber das zweite ist ein Array, das mit einem Referenzwert initialisiert wurde. Da Sie in Catalyst normalerweise verschiedene Werte über Ihre Anwendung über Stash oder ähnliche Konstrukte versenden, können Sie überprüfen, ob Ihr Array wirklich skalare Werte enthält:)

+0

Deviolog, ich denke, Sie könnten etwas unternehmen. Wie ich in meinem Beitrag erwähnt habe, habe ich den Code nicht mehr, so dass ich das Problem nicht reproduzieren kann. Ihre Hypothese scheint jedoch sehr vernünftig. Da es keine anderen Antworten gibt, werde ich diese annehmen. –