auf dieser Seite
http://perl-seiten.homepage.t-online.de/html/perl_schw.html#abs3
finde ich in dem Beispiel in der 3. gelben Box folgende Zeilen:
foreach my $elem (@liste) {
push(@temp_1,[ $elem, ( $elem =~ /<(\d+)>/ )[0] ]);
}
Mich hat die runde Klammer und der Index 0 um die Regex gewundert. Ich habe
das mal entfernt und erhalte das gleiche Ergebnis.
Wollte der Autor mit der runden Klammer den List-Context "erzwingen" und mit
[0] dann das Ergebnis aus $1 (die gefundene Zahl aus der Regex) auswᅵhlen?
Da anscheinend in dem anonymen Array der List-Context gilt, funktioniert
diese einfachere Zeile genauso:
foreach my $elem (@liste) {
push(@temp_1,[ $elem, $elem =~ /<(\d+)>/ ]);
}
Weiter unten in der "Schwartz'schen Transformation" im Map kann man es
ebenso entfernen.
Habe ich mir das soweit richtig zusammengereimt?
--
Grᅵᅵe
Klaus
Klaus wrote:
> foreach my $elem (@liste) {
> push(@temp_1,[ $elem, ( $elem =~ /<(\d+)>/ )[0] ]);
> }
>
> Mich hat die runde Klammer und der Index 0 um die Regex gewundert. Ich habe
> das mal entfernt und erhalte das gleiche Ergebnis.
>
> Wollte der Autor mit der runden Klammer den List-Context "erzwingen" und mit
> [0] dann das Ergebnis aus $1 (die gefundene Zahl aus der Regex) auswᅵhlen?
vermutlich nicht. Sobald die Regex mehrere Captures enthᅵlt, macht der
Index einen Unterschied. Ohne den Index wᅵrde der Inhalt aller captures
auf dem Array landen.
Es geht also vermutlich eher um die Erweiterbarkeit des Codes.
Grᅵᅵe,
Moritz
--
Moritz Lenz
http://perl-6.de/ http://moritz.faui2k3.org/
Fᅵr wahrscheinlicher halte ich, dass der Autor den Code robust gegen
einen Kontextwechsel machen wollte. Im Skalarkontext wᅵrde
er ohne den erzwungenen Listkontext kaputt gehen, da =~ in dem Fall
einen boolschen Wert liefert.
Grᅵᅵe
Frank Seitz
--
Dipl.-Inform. Frank Seitz
Anwendungen fᅵr Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel
Homepage: http://www.frank-seitz.de/
XING-Profil: http://www.xing.com/profile/Frank_Seitz2