Referências

Posted by webmaster | Perl |


O conceito de é um pouco mais complicado de entender para quem está começando e/ou tem pouca experiência com . Uma “aponta” para outra . A contém a localização de outra . Nada melhor do que um exemplo para ajudar a entender:

$a = “Oi”;
#Um scalar normal
$b = \$a;
#O $b é uma para o $a

O ‘\’ antes de uma serve para “” sua . Assim:

print $$b;

Mostrará:

Oi

Pode-se como o scalar ($) referenciado por $b. Praticamente qualquer coisa pode ser referenciada: scalares($), arrays(@), hashes(%), filehandles ou mesmo funções(&). Assim:

@array = ( 13, ” carro”, $a);
#Uma array de 3 elementos
$b = \@array;
#$b é uma para @array

Assim, @$b é a array(@) referenciada por $b. para não usar um tipo de diferente da referida pela , no caso usar um $ ($$b) ao invés de um @ (@$b). Isso causará um alerta ou mesmo erro na execução do programa.

Pode não parecer óbvio o uso de referências, mas imagine uma array com 1MB de tamanho. Se você simplesmente copiá-la com:

@new_array = @old_array;

Você terá uma idêntica de @old_array.

Se @old_array tem 1MB, @new_array usará outro 1MB. Quando você passa parâmetros para uma função, os parâmetros são copiados para a array @_, a mesma situação ocorre. Se, ao invés de passar parâmetro por parâmetro, for passada uma , economiza-se memória e ganha-se velocidade:

@array_gigante = ();
#Uma array gigante
funcao(\@array_gigante);
#passa uma da array
sub funcao{
$refarray = $_[1];
# da
print @$refarray;
#Usando a array normalmente
print $$refarray[2];
#Ou o terceiro item
}

Tags: , , , , , , , ,

Nenhum Comentário

Nenhum comentário ainda.

Feed RSS dos comentários deste post

O formulário de comentários está fechado no momento.