Je continue de voir le mot-clé "mon" devant les noms de variables dans les exemples de scripts Perl en ligne mais je n'ai aucune idée de 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 à quoi cela sert étant donné la différence entre la façon dont je le vois utilisé 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 listées sont locales (lexicalement) au bloc, fichier ou eval englobant. Si plus d'une valeur est répertoriée, la liste doit être placée entre parenthèses.
Que fait-il et comment est-il utilisé?
perl
scope
declaration
FistOfFury
la source
la source
my
n'y a pas du tout tenu compte. C'est l'opérateur d'affectation scalaire (=
) qui a appliqué le contexte scalaire@arr
.Réponses:
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 se traduit par une multitude d'avantages dérivés.Si vous ne déclarez pas de variable avec
my
, une variable globale sera créée à la place. Ceci est à éviter. Utiliseruse strict;
indique à Perl que vous voulez être empêché de créer implicitement des variables globales, c'est pourquoi vous devez toujours utiliseruse strict;
(etuse warnings;
) dans vos programmes.Lecture connexe: Pourquoi utiliser
use strict;
etuse warnings;
?la source
var
etlet
en JavaScript. Sans'use strict';
JS, vous pourrez déclarer de nouvelles variables globales sans aucun mot clé, ce qui n'est pas considéré comme la meilleure pratique.let
et quevar
faire et comment devraient-ils être utilisés?" Et oui, la réponse serait à peu près la même. (Leslet
vars de JS ressemblent beaucoup auxmy
vars de Perl , sauf que leslet
vars ne peuvent pas être capturés.)use strict;
? Mais ce n'était pas la question, etuse strict;
fait plus que cela. Ou peut-être que vous vouliez communiquer quimy
limite la portée des vars un peu commelet
etvar
faire, mais c'est à peu près la première phrase de la réponse. 3) Si vous souhaitez répondre à une question différemment, c'est à cela que servent les réponses.Résumé rapide:
my
crée une nouvelle variable,local
modifie temporairement la valeur d'une variableDans l'exemple ci-dessous, $ :: a fait référence à $ a dans l'espace de noms 'global'.
c'est-à-dire,
local
change temporairement la valeur de la variable, mais uniquement dans la portée dans laquelle elle existe.Source: http://www.perlmonks.org/?node_id=94007
Mettre à jour
À propos de la différence entre
our
etmy
veuillez voir(Merci à ThisSuitIsBlackNot ).
la source
their
?our
: stackoverflow.com/questions/845060/…Les variables privées via my () sont la documentation principale de
my
.Dans l'exemple de taille de tableau que vous mentionnez, 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.
la source