2010-01-08 2 views

Répondre

37

Vous voulez

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

Attention, 1 est le deuxième élément, pas le premier.

+3

au cas où quelqu'un a besoin de rechercher ce que $ # tableau signifie http://stackoverflow.com/questions/8618858/how-do-dollar-and-number-sign-together-work-in-perl –

+0

Merci @Chas, cela a fonctionné pour moi –

18

L'opérateur .. forme un range de gauche à juste valeur - si le droit est supérieur ou égal à la la gauche. En outre, en Perl, l'indexation du tableau commence à zéro.

Que pensez-vous de cela?

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

$#array vous donne l'indice du dernier élément du tableau.

5

Depuis les deux premières phrases pour l'range operator, documentées dans perlop:

binaire « .. » est l'opérateur de gamme, ce qui est vraiment deux opérateurs différents en fonction du contexte. Dans le contexte de la liste, il renvoie une liste de valeurs comptant (en hausse de un) de la valeur de gauche à la bonne valeur. Si la valeur de gauche est supérieure à la valeur correcte, elle renvoie la liste vide.

Lorsque le code ne fonctionne pas, décomposer pour voir ce qui se passe. Par exemple, vous essayez l'opérateur de la plage pour voir ce qu'il a produit:

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

Lorsque vous avez une liste vide et se rendit compte qu'il se passe quelque chose que vous ne comprenez pas, consultez la documentation pour ce que vous êtes essayer de faire ça pour vérifier ce que vous pensez qu'il devrait faire. :)

Questions connexes