Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

perl-seiten, Klammer + Index unnötig?

2 views
Skip to first unread message

Klaus

unread,
Dec 6, 2009, 3:07:57 PM12/6/09
to
Hallo,

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

Moritz Lenz

unread,
Dec 6, 2009, 3:24:34 PM12/6/09
to
Hallo,

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/

Frank Seitz

unread,
Dec 7, 2009, 10:43:05 AM12/7/09
to
Moritz Lenz wrote:
> 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.

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

0 new messages