Perl - Tableaux
Un tableau est une variable qui stocke une liste ordonnée de valeurs scalaires. Les variables de tableau sont précédées d'un signe «at» (@). Pour faire référence à un seul élément d'un tableau, vous utiliserez le signe dollar ($) avec le nom de la variable suivi de l'index de l'élément entre crochets.
Voici un exemple simple d'utilisation des variables de tableau -
#!/usr/bin/perl
@ages = (25, 30, 40);
@names = ("John Paul", "Lisa", "Kumar");
print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";
Ici, nous avons utilisé le signe d'échappement (\) avant le signe $ juste pour l'imprimer. Les autres Perl le comprendront comme une variable et afficheront sa valeur. Une fois exécuté, cela produira le résultat suivant -
$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = John Paul
$names[1] = Lisa
$names[2] = Kumar
En Perl, les termes List et Array sont souvent utilisés comme s'ils étaient interchangeables. Mais la liste contient les données et le tableau est la variable.
Création de tableaux
Les variables de tableau sont précédées du signe @ et sont remplies à l'aide de parenthèses ou de l'opérateur qw. Par exemple -
@array = (1, 2, 'Hello');
@array = qw/This is an array/;
La deuxième ligne utilise l'opérateur qw //, qui renvoie une liste de chaînes, séparant la chaîne délimitée par un espace blanc. Dans cet exemple, cela conduit à un tableau à quatre éléments; le premier élément est «ceci» et le dernier (quatrième) est «tableau». Cela signifie que vous pouvez utiliser différentes lignes comme suit -
@days = qw/Monday
Tuesday
...
Sunday/;
Vous pouvez également remplir un tableau en affectant chaque valeur individuellement comme suit -
$array[0] = 'Monday';
...
$array[6] = 'Sunday';
Accès aux éléments de la baie
Lors de l'accès à des éléments individuels à partir d'un tableau, vous devez faire précéder la variable d'un signe dollar ($), puis ajouter l'index de l'élément entre crochets après le nom de la variable. Par exemple -
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
print "$days[0]\n";
print "$days[1]\n";
print "$days[2]\n";
print "$days[6]\n";
print "$days[-1]\n";
print "$days[-7]\n";
Cela produira le résultat suivant -
Mon
Tue
Wed
Sun
Sun
Mon
Les indices de tableau commencent à zéro, donc pour accéder au premier élément, vous devez donner 0 comme index. Vous pouvez également donner un index négatif, auquel cas vous sélectionnez l'élément à partir de la fin, plutôt que du début, du tableau. Cela signifie ce qui suit -
print $days[-1]; # outputs Sun
print $days[-7]; # outputs Mon
Tableaux de nombres séquentiels
Perl propose un raccourci pour les nombres et les lettres séquentiels. Plutôt que de taper chaque élément en comptant jusqu'à 100 par exemple, nous pouvons faire quelque chose comme suit -
#!/usr/bin/perl
@var_10 = (1..10);
@var_20 = (10..20);
@var_abc = (a..z);
print "@var_10\n"; # Prints number from 1 to 10
print "@var_20\n"; # Prints number from 10 to 20
print "@var_abc\n"; # Prints number from a to z
Ici, le double point (..) est appelé range operator. Cela produira le résultat suivant -
1 2 3 4 5 6 7 8 9 10
10 11 12 13 14 15 16 17 18 19 20
a b c d e f g h i j k l m n o p q r s t u v w x y z
Taille du tableau
La taille d'un tableau peut être déterminée en utilisant le contexte scalaire sur le tableau - la valeur retournée sera le nombre d'éléments dans le tableau -
@array = (1,2,3);
print "Size: ",scalar @array,"\n";
La valeur renvoyée sera toujours la taille physique du tableau, et non le nombre d'éléments valides. Vous pouvez démontrer cela, et la différence entre scalaire @array et $ # array, en utilisant ce fragment est la suivante -
#!/usr/bin/perl
@array = (1,2,3);
$array[50] = 4;
$size = @array;
$max_index = $#array;
print "Size: $size\n";
print "Max Index: $max_index\n";
Cela produira le résultat suivant -
Size: 51
Max Index: 50
Il n'y a que quatre éléments dans le tableau qui contiennent des informations, mais le tableau comporte 51 éléments, avec un indice le plus élevé de 50.
Ajout et suppression d'éléments dans un tableau
Perl fournit un certain nombre de fonctions utiles pour ajouter et supprimer des éléments dans un tableau. Vous vous demandez peut-être qu'est-ce qu'une fonction? Jusqu'à présent, vous avez utiliséprintfonction pour imprimer diverses valeurs. De même, il existe diverses autres fonctions ou parfois appelées sous-routines, qui peuvent être utilisées pour diverses autres fonctionnalités.
N ° Sr. | Types et description |
---|---|
1 | push @ARRAY, LIST Pousse les valeurs de la liste à la fin du tableau. |
2 | pop @ARRAY Saute et renvoie la dernière valeur du tableau. |
3 | shift @ARRAY Décale la première valeur du tableau et la renvoie, raccourcissant le tableau de 1 et déplaçant tout vers le bas. |
4 | unshift @ARRAY, LIST Ajoute la liste au début du tableau et renvoie le nombre d'éléments dans le nouveau tableau. |
#!/usr/bin/perl
# create a simple array
@coins = ("Quarter","Dime","Nickel");
print "1. \@coins = @coins\n";
# add one element at the end of the array
push(@coins, "Penny");
print "2. \@coins = @coins\n";
# add one element at the beginning of the array
unshift(@coins, "Dollar");
print "3. \@coins = @coins\n";
# remove one element from the last of the array.
pop(@coins);
print "4. \@coins = @coins\n";
# remove one element from the beginning of the array.
shift(@coins);
print "5. \@coins = @coins\n";
Cela produira le résultat suivant -
1. @coins = Quarter Dime Nickel
2. @coins = Quarter Dime Nickel Penny
3. @coins = Dollar Quarter Dime Nickel Penny
4. @coins = Dollar Quarter Dime Nickel
5. @coins = Quarter Dime Nickel
Trancher les éléments du tableau
Vous pouvez également extraire une «tranche» d'un tableau - c'est-à-dire que vous pouvez sélectionner plusieurs éléments d'un tableau afin de produire un autre tableau.
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
@weekdays = @days[3,4,5];
print "@weekdays\n";
Cela produira le résultat suivant -
Thu Fri Sat
La spécification d'une tranche doit avoir une liste d'indices valides, positifs ou négatifs, chacun séparé par une virgule. Pour la vitesse, vous pouvez également utiliser le.. opérateur de plage -
#!/usr/bin/perl
@days = qw/Mon Tue Wed Thu Fri Sat Sun/;
@weekdays = @days[3..5];
print "@weekdays\n";
Cela produira le résultat suivant -
Thu Fri Sat
Remplacement des éléments de la baie
Nous allons maintenant introduire une autre fonction appelée splice(), qui a la syntaxe suivante -
splice @ARRAY, OFFSET [ , LENGTH [ , LIST ] ]
Cette fonction supprimera les éléments de @ARRAY désignés par OFFSET et LENGTH, et les remplacera par LIST, si spécifié. Enfin, il renvoie les éléments supprimés du tableau. Voici l'exemple -
#!/usr/bin/perl
@nums = (1..20);
print "Before - @nums\n";
splice(@nums, 5, 5, 21..25);
print "After - @nums\n";
Cela produira le résultat suivant -
Before - 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
After - 1 2 3 4 5 21 22 23 24 25 11 12 13 14 15 16 17 18 19 20
Ici, le remplacement proprement dit commence par le 6ème chiffre après que cinq éléments sont ensuite remplacés de 6 à 10 par les numéros 21, 22, 23, 24 et 25.
Transformer des chaînes en tableaux
Examinons une autre fonction appelée split(), qui a la syntaxe suivante -
split [ PATTERN [ , EXPR [ , LIMIT ] ] ]
Cette fonction divise une chaîne en un tableau de chaînes et la renvoie. Si LIMIT est spécifié, se divise en au plus ce nombre de champs. Si PATTERN est omis, se divise sur des espaces. Voici l'exemple -
#!/usr/bin/perl
# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";
# transform above strings into arrays.
@string = split('-', $var_string);
@names = split(',', $var_names);
print "$string[3]\n"; # This will print Roses
print "$names[4]\n"; # This will print Michael
Cela produira le résultat suivant -
Roses
Michael
Transformer des tableaux en chaînes
Nous pouvons utiliser le join()fonction pour rejoindre les éléments du tableau et former une longue chaîne scalaire. Cette fonction a la syntaxe suivante -
join EXPR, LIST
Cette fonction joint les chaînes séparées de LIST en une seule chaîne avec des champs séparés par la valeur de EXPR et renvoie la chaîne. Voici l'exemple -
#!/usr/bin/perl
# define Strings
$var_string = "Rain-Drops-On-Roses-And-Whiskers-On-Kittens";
$var_names = "Larry,David,Roger,Ken,Michael,Tom";
# transform above strings into arrays.
@string = split('-', $var_string);
@names = split(',', $var_names);
$string1 = join( '-', @string );
$string2 = join( ',', @names );
print "$string1\n";
print "$string2\n";
Cela produira le résultat suivant -
Rain-Drops-On-Roses-And-Whiskers-On-Kittens
Larry,David,Roger,Ken,Michael,Tom
Tri des tableaux
le sort()fonction trie chaque élément d'un tableau selon les normes numériques ASCII. Cette fonction a la syntaxe suivante -
sort [ SUBROUTINE ] LIST
Cette fonction trie la LISTE et renvoie la valeur du tableau trié. Si SUBROUTINE est spécifié, la logique spécifiée à l'intérieur de SUBTROUTINE est appliquée lors du tri des éléments.
#!/usr/bin/perl
# define an array
@foods = qw(pizza steak chicken burgers);
print "Before: @foods\n";
# sort this array
@foods = sort(@foods);
print "After: @foods\n";
Cela produira le résultat suivant -
Before: pizza steak chicken burgers
After: burgers chicken pizza steak
Veuillez noter que le tri est effectué en fonction de la valeur numérique ASCII des mots. La meilleure option consiste donc à d'abord transformer chaque élément du tableau en lettres minuscules, puis à exécuter la fonction de tri.
La variable spéciale $ [
Jusqu'à présent, vous avez vu des variables simples que nous avons définies dans nos programmes et les avons utilisées pour stocker et imprimer des valeurs scalaires et de tableau. Perl fournit de nombreuses variables spéciales, qui ont leur signification prédéfinie.
Nous avons une variable spéciale, qui s'écrit $[. Cette variable spéciale est un scalaire contenant le premier index de tous les tableaux. Comme les tableaux Perl ont une indexation basée sur zéro, $ [sera presque toujours égal à 0. Mais si vous définissez $ [sur 1, tous vos tableaux utiliseront l'indexation basée sur zéro. Il est recommandé de ne pas utiliser d'autre indexation que zéro. Cependant, prenons un exemple pour montrer l'utilisation de $ [variable -
#!/usr/bin/perl
# define an array
@foods = qw(pizza steak chicken burgers);
print "Foods: @foods\n";
# Let's reset first index of all the arrays.
$[ = 1;
print "Food at \@foods[1]: $foods[1]\n";
print "Food at \@foods[2]: $foods[2]\n";
Cela produira le résultat suivant -
Foods: pizza steak chicken burgers
Food at @foods[1]: pizza
Food at @foods[2]: steak
Fusion de tableaux
Étant donné qu'un tableau n'est qu'une séquence de valeurs séparées par des virgules, vous pouvez les combiner comme indiqué ci-dessous -
#!/usr/bin/perl
@numbers = (1,3,(4,5,6));
print "numbers = @numbers\n";
Cela produira le résultat suivant -
numbers = 1 3 4 5 6
Les tableaux intégrés deviennent simplement une partie du tableau principal comme indiqué ci-dessous -
#!/usr/bin/perl
@odd = (1,3,5);
@even = (2, 4, 6);
@numbers = (@odd, @even);
print "numbers = @numbers\n";
Cela produira le résultat suivant -
numbers = 1 3 5 2 4 6
Sélection d'éléments dans les listes
La notation de liste est identique à celle des tableaux. Vous pouvez extraire un élément d'un tableau en ajoutant des crochets à la liste et en donnant un ou plusieurs indices -
#!/usr/bin/perl
$var = (5,4,3,2,1)[4];
print "value of var = $var\n"
Cela produira le résultat suivant -
value of var = 1
De même, nous pouvons extraire des tranches, mais sans avoir besoin d'un caractère @ de début -
#!/usr/bin/perl
@list = (5,4,3,2,1)[1..3];
print "Value of list = @list\n";
Cela produira le résultat suivant -
Value of list = 4 3 2