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