Fonction push() en Perl

Dans le langage de programmation Perl, il ya une fonction intégrée push(). Avec cette fonction, vous pouvez ajouter des éléments à la fin de Perl tableau.

Voici un exemple:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

my @arr = (1, 2);

push @arr, undef, 'Hello', 8;

print Dumper \@arr;

Ce programme est déterminé par le tableau @arr avec deux éléments. Plus loin avec l'aide de la fonction push() dans ce tableau ajoutent encore les 3 éléments. undef, la chaîne de 'Hello' et le nombre de 8.

Le résultat de ce programme:

$VAR1 = [
          1,
          2,
          undef,
          'Hello',
          8
        ];

Les arguments

push(@arr, $value1, $value2);
push(@arr, @other_arr);
push(@arr, @other_arr, @and_the_other_arr);

L'utilisation standard de la fonction push() est de transmettre non moins de deux éléments.

Le premier élément doit être un tableau (dans certaines versions de Perl le premier élément peut encore être une référence à un tableau, mais ce l'utilisation n'est pas recommandée, les détails dans une autre section ci-dessous)

Les arguments suivants est généralement scalaires ou des tableaux. Dans le tableau de la première l'argument sera ajouté tous les éléments des arguments suivants.

Comme argument, vous pouvez spécifier le hachage push(@arr, %hash). Dans le tableau @arr seront ajoutés toutes les paires clé / valeur de hachage (ici, il y a un trait que l'ordre des valeurs de hachage indéfini et les différents démarrages d'un même programme peut créer les éléments d'un tableau dans des ordres différents). Mais la vie réelle utilisation de l'empreinte est comme argument de la fonction push() se rencontre rarement.

Si vous ne spécifiez pas un seul argument, ce serait une erreur:

Not enough arguments for push at script.pl line 3, near "push()"
Execution of script.pl aborted due to compilation errors.

Si vous spécifiez un argument et cet argument un tableau push(@arr);, alors pas d'erreur, cela ne modifie le tableau, mais si dans le code de use warnings;, ce sera un avertissement:

Useless use of push with no values at script.pl line 8.

La valeur de retour

La fonction de push() renvoie le nombre d'éléments qui est devenu dans le tableau après l'exécution de cette fonction.

my $number = push(@arr, $value);

Ce code est similaire voici ce code:

push(@arr, $value);
my $number = scalar(@arr);

La valeur de retour push() besoin n'est pas très souvent. Très souvent utilisé push(@arr, $value), et la valeur de retour de la valeur est ignorée.

L'utilisation de ARRAYREF comme premier argument

L'utilisation standard de la fonction push() — le premier argument est un tableau, dans lequel vous ajoutez des éléments de tous les autres arguments.

Mais dans le langage de programmation Perl a été une expérience. Dans ce cas, si le premier argument est une référence à un tableau, la fonction push()lui-même fait разыменование ce lien et ajoute les données dans un tableau.

Voici le code.

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push $arr, 1;

warn Dumper $arr;

Perl à la version 5.12 (inclus), ce code génère une erreur:

Type of arg 1 to push must be array (not private variable) at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

À partir de la version de Perl 5.14 et à la version 5.18 (inclus), c'est un code ajoutait l'élément en ARRAYREF et le résultat a été:

$VAR1 = [
          1
        ];

Perl 5.20 et 5.22 aussi ajouté un élément dans ARRAYREF, mais encore et posé avertissement:

push on reference is experimental at script.pl line 9.
$VAR1 = [
          1
        ];

Et depuis la version 5.24 ce code génère une erreur:

Experimental push on scalar is now forbidden at script.pl line 9, near "1;"
Execution of script.pl aborted due to compilation errors.

Cette фичей de la langue n'est pas recommandée. Si vous avez besoin d'ajouter un élément dans ARRAYREF, il est préférable d'écrire explicitement push @{$arr}, 1; au lieu de push $arr, 1;

Voici le code qui fonctionne de façon identique sur toutes les versions de Perl:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;

my $arr = [];

push @{$arr}, 1;

warn Dumper $arr;

La documentation officielle

Voici la sortie de la commande perldoc -f push:

       push ARRAY,LIST
       push EXPR,LIST
               Treats ARRAY as a stack by appending the values of LIST to the
               end of ARRAY.  The length of ARRAY increases by the length of
               LIST.  Has the same effect as

                   for $value (LIST) {
                       $ARRAY[++$#ARRAY] = $value;
                   }

               but is more efficient.  Returns the number of elements in the
               array following the completed "push".

               Starting with Perl 5.14, "push" can take a scalar EXPR, which
               must hold a reference to an unblessed array.  The argument will
               be dereferenced automatically.  This aspect of "push" is
               considered highly experimental.  The exact behaviour may change
               in a future version of Perl.

               To avoid confusing would-be users of your code who are running
               earlier versions of Perl with mysterious syntax errors, put
               this sort of thing at the top of your file to signal that your
               code will work only on Perls of a recent vintage:

                   use 5.014;  # so push/pop/etc work on scalars (experimental)

Thèmes connexes

Autres articles