Thread Nur bestimmte Werte aus einer Liste ausgeben (3 answers)
Opened by Wild.Card at 2018-01-22 19:41

Linuxer
 2018-01-22 21:19
#187942 #187942
User since
2006-01-27
3875 Artikel
HausmeisterIn

user image
foreach iteriert über eine Liste. Wenn Du keine Laufvariable definierst, wird $_ benutzt. Die Laufvariable ist ein Skalar, kein Array.

Dein Code:
Code: (dl )
1
2
3
4
5
6
7
my @array = (1..15); 

foreach (@array) {
print $_ if ($_ > 5 && $_ < 12);
}

print join (", ", @array);


Der geht ja in der Schleife nur jedes Element von @array durch und gibt es auf der aktuellen Standardausgabe aus, wenn der aktuelle Werte größer 5 und kleiner 12 ist. @array selbst wird hierbei nicht verändert. Nach der Schleife wird dann das komplette unveränderte @array ausgegeben.

Wenn Du nach der Schleife die "gewünschten" Elemente in einem anderen Array haben willst, dann musst Du sie an Stelle des print selber in diesen neuen Array pushen. Das hat Dir hlubenow ja bereits aufgezeigt.


Es hängt stark vom Anwendungsfall ab, ob man grep sinnvoll durch ein for/foreach ersetzen kann oder sollte. Hier halte ich grep für die richtige Wahl.

Einfaches Prinzip:
- grep() benutzen, wenn man einfach eine Auswahl von Elementen aus einer Liste von Werten haben will
- for()/foreach() benutzen, wenn man beispielsweise alle Werte in einem Array verändern muss
- for(;;) im Hinterkopf behalten und bei Bedarf verwenden (also das for() mit C-Syntax)
- map() benutzen, wenn man für eine Liste von Werten eine Aktion durchführen muss und das Ergebnis in einem neuen Array haben will

Gerade bei recht einfachen Sachverhalten versuche ich mich an dieses Prinzip zu halten.
Wenn es kompliziertere Wünsche gibt, muss man sich das im konkreten Einzelfall anschauen, was man nutzen will.
meine Beiträge: I.d.R. alle Angaben ohne Gewähr und auf Linux abgestimmt!
Die Sprache heisst Perl, nicht PERL. - Bitte Crossposts als solche kenntlich machen!

View full thread Nur bestimmte Werte aus einer Liste ausgeben