Continuo vendo a palavra-chave "my" na frente dos nomes das variáveis em scripts Perl de exemplo online, mas não tenho ideia do que significa. Tentei ler as páginas do manual e outros sites online, mas estou tendo dificuldade em discernir para que serve, dada a diferença entre como vejo que é usado e o manual.
Por exemplo, é usado para obter o comprimento da matriz neste post: Encontre o tamanho de uma matriz em Perl
Mas o manual diz:
Um my declara que as variáveis listadas são locais (lexicamente) para o bloco, arquivo ou eval que o inclui. Se mais de um valor for listado, a lista deve ser colocada entre parênteses.
O que ele faz e como é usado?
perl
scope
declaration
FistOfFury
fonte
fonte
my
não foi levado em consideração no mínimo. É o operador de atribuição escalar (=
) que reforça o contexto escalar@arr
.Respostas:
my
restringe o escopo de uma variável. O escopo de uma variável é onde ela pode ser vista. Reduzir o escopo de uma variável para onde ela é necessária é um aspecto fundamental de uma boa programação. Isso torna o código mais legível e menos sujeito a erros, e resulta em uma série de benefícios derivados.Se você não declarar uma variável usando
my
, uma variável global será criada. Isso deve ser evitado. Usaruse strict;
diz ao Perl que você deseja ser impedido de criar variáveis globais implicitamente, e é por isso que você deve sempre usaruse strict;
(euse warnings;
) em seus programas.Leitura relacionada: Por que usar
use strict;
euse warnings;
?fonte
var
elet
em JavaScript. Sem'use strict';
JS permitirá que você declare novas variáveis globais sem nenhuma palavra-chave, o que não é considerado a melhor prática.let
evar
fazem e como eles devem ser usados?" E sim, a resposta seria praticamente a mesma. (Vars de JSlet
são muito parecidos commy
vars de Perl , exceto quelet
vars não podem ser capturados.)use strict;
? Mas essa não era a questão euse strict;
faz mais do que isso. Ou talvez você quisesse comunicar quemy
limita o escopo de vars comolet
evar
faz, mas essa é basicamente a primeira frase da resposta. 3) Se você deseja responder a uma pergunta de forma diferente, é para isso que serve o Answers.Resumo rápido:
my
cria uma nova variável,local
altera temporariamente o valor de uma variávelNo exemplo abaixo, $ :: a refere-se a $ a no namespace 'global'.
ou seja,
local
altera temporariamente o valor da variável, mas apenas dentro do escopo em que ela existe.Fonte: http://www.perlmonks.org/?node_id=94007
Atualizar
Sobre a diferença entre
our
emy
consulte(Graças a ThisSuitIsBlackNot ).
fonte
their
?our
: stackoverflow.com/questions/845060/…Variáveis privadas via my () é a documentação principal para
my
.No exemplo do tamanho do array que você mencionou, não é usado para encontrar o tamanho do array. É usado para criar uma nova variável para manter o tamanho do array.
fonte