2016-06-16 29 views
0

Ich habe zwei ähnliche Bits der Syntax ausprobiert. Das erste Werk:Perl - kann Array von Objekten nicht erstellen

my $obj = PI::something::ObjectManipulator->new(); 
    $obj->setValue('HELLO'); 
    my $objList = [$object]; 

Dies ist jedoch nicht:

my $objList= []; 
    foreach my $value (@values) { 
    my $obj = PI::something::ObjectManipulator->new(); 
    $obj->setValue($value); 
    push @$objList, $obj; 
    }; 

Was ist der Unterschied zwischen diesen beiden Art, die Dinge? Warum funktioniert das zweite nicht? (Durch die nicht arbeiten, so scheint es zu sein, dass $ objList am Ende des Codes ist noch leer.)

+5

Sieht gut aus von hier. Sind Sie sicher, dass '@ values' keine leere Liste ist? – mob

Antwort

4

Unter der Annahme, my $objList = [$object]; ist ein Tippfehler für my $objList = [$obj]; und unter der Annahme, my @values = 'HELLO';, gibt es keine Unterschiede.

Angenommen, Sie bedeutet „@$objList ist noch leer“, wenn man die „$objList noch leer“, das kann nur geschehen, wenn die Schleife nicht eingegeben wird (das heißt @values leer ist).