web-dev-qa-db-fra.com

Comment utiliser le mot clé "mon" en Perl?

Je continue à voir le mot-clé "mon" devant les noms de variables dans les scripts Perl en ligne mais je ne sais pas du tout ce que cela signifie. J'ai essayé de lire les pages de manuel et d'autres sites en ligne, mais j'ai du mal à discerner son utilité compte tenu de la différence entre la façon dont je vois l'utilisation et le manuel.

Par exemple, il est utilisé pour obtenir la longueur du tableau dans cet article: Trouver la taille d’un tableau en Perl

Mais le manuel dit:

Un my déclare que les variables répertoriées sont locales (lexicalement) par rapport au bloc, fichier ou eval englobant. Si plusieurs valeurs sont répertoriées, la liste doit être placée entre parenthèses.

Que fait-il et comment est-il utilisé?

86
FistOfFury

my restreint la portée d'une variable. La portée d'une variable est l'endroit où elle peut être vue. Réduire la portée d'une variable à l'endroit où la variable est nécessaire est un aspect fondamental d'une bonne programmation. Cela rend le code plus lisible et moins sujet aux erreurs, et génère de nombreux avantages dérivés.

Si vous ne déclarez pas une variable en utilisant my, une variable globale sera créée à la place. Ceci doit être évité. En utilisant use strict; indique à Perl que vous souhaitez empêcher la création implicite de variables globales. C'est pourquoi vous devez toujours utiliser use strict; (et use warnings;) dans vos programmes.


Lecture connexe: Pourquoi utiliser use strict; et use warnings;?

131
ikegami

Résumé rapide: my crée une nouvelle variable, local modifie temporairement la valeur d'une variable

Dans l'exemple ci-dessous, $ :: a fait référence à $ a dans l'espace de noms 'global'.

$a = 3.14159;
{
  my $a = 3;
  print "In block, \$a = $a\n";
  print "In block, \$::a = $::a\n";
}
print "Outside block, \$a = $a\n";
print "Outside block, \$::a = $::a\n";

# This outputs
In block, $a = 3
In block, $::a = 3.14159
Outside block, $a = 3.14159
Outside block, $::a = 3.14159

c.-à-d., local modifie temporairement la valeur de la variable, mais uniquement dans les limites de sa portée.

Source: http://www.perlmonks.org/?node_id=94007

Mettre à jour

À propos de la différence entre our et my veuillez voir

(Merci à ThisSuitIsBlackNot).

26
Igor Chubin

Variables privées via my () est la documentation principale de my.

Dans l'exemple de taille de tableau que vous avez mentionné, il n'est pas utilisé pour trouver la taille du tableau. Il est utilisé pour créer une nouvelle variable pour contenir la taille du tableau.

4
cjm