Array Slice - Fehler oder Denkfehler?

Folgendes Stück Code liefert das zu erwartende Ergebnis: ‚B C‘

my @arr;
push @arr,‚A‘;
push @arr,‚B‘;
push @arr,‚C‘;
print „@arr[1,-1]“;

==> B C

Folgendes sollte als Ausgabe ‚B‘ liefern, liefert aber ‚B B‘

my @arr;
push @arr,‚A‘;
push @arr,‚B‘;
print „@arr[1,-1]“;

==> B B

Mache ich einen Denkfehler oder hat Perl (ActiveState Perl) einen Bug?

Klaus

Hallo Klaus,

Folgendes Stück Code liefert das zu erwartende Ergebnis: ‚B C‘

my @arr;
push @arr,‚A‘;
push @arr,‚B‘;
push @arr,‚C‘;

gebe das 2. (Perl zählt die Elemente von 0 ab!)

UND ( entspricht dem Komma „,“ ) das letzte Element (-1)

des Arrays aus:

print „@arr[1,-1]“;

==> B C

Folgendes sollte als Ausgabe ‚B‘ liefern, liefert aber ‚B B‘

my @arr;
push @arr,‚A‘;
push @arr,‚B‘;

gebe das 2. UND das letzte Element (also hier das

gleiche Element) des Arrays aus:

print „@arr[1,-1]“;

==> B B

Mache ich einen Denkfehler oder hat Perl (ActiveState Perl)
einen Bug?

Perl verhält sich so wie es sich gehört, denn das Komma
in dem Arrayslice bedeutet, dass Du die Elemente
einzeln ansprichst.

Mit dem Bereichsoperator „…“ sieht die Sache dann
anders aus:

perl -e "@a=qw[a b c];print @a[0..2];"
a b c

Gruss,
-Andreas.

Hallo!

Ich könnte mich ja irren, aber ich würde sagen Denkfehler. :smile:
Der Befehl
print „@arr[1,-1]“;
zeigt den Inhalt von Zelle 1 und der letzen Zelle an. (-1, von hinten zählen.). Bei ABC, ist A 0, B 1 und C 2. Daher kommt als Ausgabe BC. Wenn man jetzt aber nur zwei Werte hat, dann ist der Wert 1 der selbe, wie der letzte. Also zeigt in diesem Fall
print „@arr[1,-1]“;
zweimal die gleiche Zelle an. (Immer die 1. bzw. die letzte :smile:

–Jan Vornberger

Perl verhält sich so wie es sich gehört, denn das Komma
in dem Arrayslice bedeutet, dass Du die Elemente
einzeln ansprichst.

Mit dem Bereichsoperator „…“ sieht die Sache dann
anders aus:

Danke für die konstruktive Antwort - manchmal ist man blind :smile:
Klaus