L'index du premier élément dans un tableau Perl

Dans le langage de programmation Perl, comme dans de nombreux autres langages de programmation, le premier élément d'un tableau a un indice de 0. Mais a été l'occasion de laquelle il est fortement déconseillé de recevoir, de faire pour l'indice du premier élément a été 1 (ou un autre nombre).

Voici un exemple de code:

▶ Run
#!/usr/bin/perl

my @arr = ('one', 'two', 'three');

print $arr[1];

Le programme affichera le texte two. Nous nous adressons à un élément d'un tableau avec un indice de 1 et cette deuxième élément du tableau.

  • l'indice de 0 — se trouve le premier élément du tableau, dans notre exemple, la chaîne 'one'
  • l'indice 1 — est le deuxième élément du tableau, dans notre exemple, la chaîne 'two'
  • l'indice 2 — est le troisième élément d'un tableau, dans notre exemple, la chaîne 'three'

Pour les apprenants de la programmation, c'est inhabituel, mais c'est la norme. 0 est l'indice de la première élément de tableau dans presque tous les langages de programmation.

La variable $[

Les créateurs du langage de programmation Perl voulu faire la langue de programmeur lui-même décidé qu'il veut utiliser cette langue (le principe de TIMTOWTDI), par conséquent, dans la langue a été un moyen de modifier l'index du premier élément. Si quelqu'un est mal à l'aise utiliser 0 comme un indice du premier élément, on pourrait dire que l'indice du premier élément est 1.

Voici un exemple de code:

#!/usr/bin/perl

$[ = 1;

my @arr = ('one', 'two', 'three');

print $arr[1];

Définissons la valeur de la variable spéciale dans l'unité de $[ = 1; — ce disons que maintenant l'index du premier élément sera 1, pas 0. Le programme affichera le texte one.

Mais très rapidement, il est devenu clair que cette possibilité, rien ne simplifie, mais au contraire, complique le travail de l' avec le code. Tu ouvres le programme et la façon d'y changer quoi que ce soit d'abord besoin de comprendre comment se passe le travail avec le tableau.

Par conséquent, à partir de la version de Perl 5.12 l'utilisation de la variable $[ a donné l'alerte: Use of assignment to $[ is deprecated at script.pl line 3..

La Version De Perl 5.12, 5.14, 5.16, 5.18, 5.20, 5.22. 5.24, 5.26 publié c'est un avertissement. 5.28 est devenu d'émettre un avertissement Use of assignment to $[ is deprecated, and will be fatal in Perl 5.30 at script.pl line 3., et Perl 5.30 a cessé de donner la possibilité de changer l'indice du premier élément. Lorsque vous essayez de le faire le programme se terminer avec le texte de l'erreur Assigning non-zero to $[ is no longer possible at script.pl line 3..

De sorte que, dans les versions les plus récentes du langage Perl le premier élément d'un tableau a un indice de 0. En Perl, jusqu'à ce la version avec la possibilité de faire un nombre différent de l'indice du premier élément, mais le mieux à cette occasion ne jamais utiliser.

La documentation officielle

Voici un extrait de la sortie de la commande perldoc perlvar pro variable $[:

    $[      This variable stores the index of the first element in an array,
            and of the first character in a substring. The default is 0, but
            you could theoretically set it to 1 to make Perl behave more
            like awk (or Fortran) when subscripting and when evaluating the
            index() and substr() functions.

            As of release 5 of Perl, assignment to $[ is treated as a
            compiler directive, and cannot influence the behavior of any
            other file. (That's why you can only assign compile-time
            constants to it.) Its use is highly discouraged.

            Prior to Perl v5.10.0, assignment to $[ could be seen from outer
            lexical scopes in the same file, unlike other compile-time
            directives (such as strict). Using local() on it would bind its
            value strictly to a lexical block. Now it is always lexically
            scoped.

            As of Perl v5.16.0, it is implemented by the arybase module.

            As of Perl v5.30.0, or under "use v5.16", or "no feature
            "array_base"", $[ no longer has any effect, and always contains
            0. Assigning 0 to it is permitted, but any other value will
            produce an error.

            Mnemonic: [ begins subscripts.

            Deprecated in Perl v5.12.0.

Autres articles