Kontext-Verständnisfrage bei Arrays

22/02/2009 - 13:49 von Michael Hentsch | Report spam
Hallo zusammen,

beim "Rumexperimentieren" bin ich auf etwas gestoßen, was ich mir nicht
erklàren kann. Evtl. kann mir jemand von Euch dazu einen kleinen Tipp
geben...

Es geht um Folgendes:


my @test_array = qw( a b c ); # schnell mal ein Array angelegt
print "@test_array"; # (1) gibt "a b c" aus
print @test_array; # (2) gibt "abc" aus
print "" . @test_array; # (3) gibt nun "3" aus
print "" , @test_array; # (3) gibt nun wieder "abc" aus


Bei (1) wird die Arrayvariable im String mit den doppelten
Anführungszeichen interpoliert. Alle Elemente werden durch Leerzeichen
voneinander getrennt ausgegeben.

Bei (2) werden die Elemente des Arrays einfach hintereinanderweg ausgegeben.

Bei (1) und (2) handelt es sich also um den Listenkontext, richtig?

Was aber ist bei (3) und (4) los?

Ist es richtig, dass der "." bei (3) zwei Strings verkettet, also das
Array als String ansieht, somit dann also im skalaren Kontext verwendet
und deswegen die Anzahl der Elemente ausgibt?

Warum wird bei (4) nun "abc" ausgegeben?


Schon mal vielen Dank im Voraus

Michi
 

Lesen sie die antworten

#1 Wolf Behrenhoff
22/02/2009 - 15:37 | Warnen spam
Michael Hentsch schrieb:
Hallo zusammen,

beim "Rumexperimentieren" bin ich auf etwas gestoßen, was ich mir nicht
erklàren kann. Evtl. kann mir jemand von Euch dazu einen kleinen Tipp
geben...

Es geht um Folgendes:


my @test_array = qw( a b c ); # schnell mal ein Array angelegt
print "@test_array"; # (1) gibt "a b c" aus
print @test_array; # (2) gibt "abc" aus
print "" . @test_array; # (3) gibt nun "3" aus
print "" , @test_array; # (3) gibt nun wieder "abc" aus


Bei (1) wird die Arrayvariable im String mit den doppelten
Anführungszeichen interpoliert. Alle Elemente werden durch Leerzeichen
voneinander getrennt ausgegeben.



Genauer: die Variable $" bestimmt das Trennzeichen.

Bei (2) werden die Elemente des Arrays einfach hintereinanderweg ausgegeben.

Bei (1) und (2) handelt es sich also um den Listenkontext, richtig?

Was aber ist bei (3) und (4) los?

Ist es richtig, dass der "." bei (3) zwei Strings verkettet, also das
Array als String ansieht, somit dann also im skalaren Kontext verwendet
und deswegen die Anzahl der Elemente ausgibt?



Ja.

Warum wird bei (4) nun "abc" ausgegeben?



Weil das Komma nicht zwei Strings verkettet, sondern ganz normaler
Trenner einer Liste ist. Es liegt also Listenkontext vor. Das print
bekommt also vier Argumente (Leerstring, a, b und c).

- Wolf

Ähnliche fragen