web-dev-qa-db-fra.com

Comment imprimer le premier au cinquième des derniers éléments du tableau en Perl?

J'exécute le code suivant et j'essaie d'imprimer le premier élément dans le @Rainbow tableau à travers l'avant-dernier élément du @Rainbow tableau. Ce code fonctionne pour tous les indices positifs dans les limites du tableau, mais pas pour les indices négatifs:

@Rainbow = ("a".."z");
@slice = @Rainbow[1..-5];
print "@slice\n";
24
thenickname

Tu veux

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

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

40
Chas. Owens

Le .. L'opérateur forme une valeur plage de gauche à droite - si la droite est supérieure ou égale à la gauche. De plus, en Perl, l'indexation des tableaux commence à zéro.

Que dis-tu de ça?

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

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

18
martin clayton

À partir des deux premières phrases pour opérateur de plage , documenté dans perlop :

Le binaire ".." est l'opérateur de plage, qui est en réalité deux opérateurs différents selon le contexte. Dans un contexte de liste, il renvoie une liste de valeurs comptant (par unités) de la valeur de gauche à la valeur de droite. Si la valeur de gauche est supérieure à la valeur de droite, elle renvoie la liste vide.

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

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

Lorsque vous avez une liste vide et que vous vous rendez compte qu'il se passe quelque chose que vous ne comprenez pas, consultez la documentation pour savoir ce que vous essayez de faire pour vérifier qu'il fait ce que vous pensez qu'il devrait faire. :)

6
brian d foy