2010-01-08 8 views

Antwort

37

Sie wollen

my @slice = @rainbow[0 .. $#rainbow - 5]; 

Seien Sie vorsichtig, 1 das zweite Element ist, nicht der erste.

+3

für den Fall, dass jemand nachschlagen muss, was $ # Array bedeutet http://StackOverflow.com/Questions/8618858/How-Do-Dollar-and-Number-Sign-Together-Work-in-Perl –

+0

Danke @Chas, es hat für mich funktioniert –

18

Der .. Bediener eine range von links nach rechts Wert bildet - wenn das Recht größer oder gleich dem links. In Perl beginnt die Array-Indizierung auch bei Null.

Wie wäre es damit?

@slice = @rainbow[0..$#rainbow-5]; 

$#array gibt Ihnen den Index des letzten Elements im Array.

5

Aus den ersten beiden Sätzen für die range operator, dokumentiert in perlop:

Binary „..“ ist der Bereich Operator, der wirklich zwei verschiedene Operatoren ist abhängig vom Kontext. Im Listenkontext gibt es eine Liste von Werten zurück, die um den Einsen vom linken Wert zum rechten Wert zählen. Wenn der linke Wert größer als der rechte Wert ist, wird die leere Liste zurückgegeben.

Wenn der Code nicht funktioniert, zerlegen Sie ihn, um zu sehen, was passiert. Zum Beispiel würden Sie den Bereich Operator versuchen, um zu sehen, was es produziert:

my @indices = 1 .. -5; 
print "Indices are [@indices]\n"; 

Wenn Sie eine leere Liste bekam und erkannte, dass es etwas los ist, dass Sie nicht verstehen, überprüfen Sie die Dokumentation für was auch immer Sie sind versuchen zu tun, um zu überprüfen, dass es tut, was du denkst, dass es tun sollte. :)

Verwandte Themen