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";
Tu veux
my @slice = @Rainbow[0 .. $#Rainbow - 5];
Attention, 1 est le deuxième élément, pas le premier.
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.
À 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. :)