Perl-Foreach-Schleifen-Arrays, einfache Frage - Arrays, Perl, Schleifen, For-Schleife

Wirklich einfache Perlfrage, die mich aber sehr verwirrte.

foreach $ val (@ {$ obj-> etwas ()}) {
# das funktioniert
}

@array = $ obj-> something ();
foreach $ val (@array) {
# das tut nicht
}

Was muss ich tun, um die zweite Arbeit zu machen (d. H .: das Array separat zuweisen), ich habe die erste Form ein gutes Stück gebraucht, aber nicht wirklich verstanden, was es anders macht.

Antworten:

8 für die Antwort № 1

Wahrscheinlich:

@array = @{$obj->something()};

Aus dem ersten Beispiel sieht es so aus $obj->something() Gibt eine Array-Referenz zurück, Sie müssen es dereferenzieren.

Außerdem solltest du wirklich use strict; und use warnings;, und deklariere deine Variablen wie

my @array = @{$obj->something()};
foreach my $val (@array) {
# this does not
}

Dies wird es viel einfacher machen, Fehler zu finden (obwohl wahrscheinlich nicht dieser), sogar in einem dreizeiligen Skript.