2011-04-15 22 views
10

¿Cuánto dura la ubicación de la memoria asignada por una variable local en Perl (tanto para matrices, hash y escalares)? Por ejemplo:Perl scoping y la duración de las variables locales

sub routine 
{ 
    my $foo = "bar"; 
    return \$foo; 
} 

¿Es posible acceder a la cadena "bar" en la memoria después de la función ha vuelto? ¿Cuánto tiempo durará, y es similar a una variable estática en C o más como una variable declarada fuera del montón?

Básicamente, ¿tiene sentido esto en este contexto?

$ref = routine() 
print ${$ref}; 
+0

¿Has probado este código? Al menos podrías haber respondido la primera pregunta tú mismo. – runrig

+3

@runrig, hay una diferencia entre "resulta que funciona en este caso particular" y "se supone que esto realmente funciona". Ejecutar el código solo te dirá el primero. – cjm

Respuesta

21

Sí, ese código funcionará bien.

Perl usa reference counting, por lo que la variable vivirá mientras alguien tenga una referencia al mismo. Los lexical variables de Perl son algo así como las variables automáticas de C, porque normalmente desaparecen cuando sales del alcance, pero también son como una variable en el montón, porque puedes devolver una referencia a uno y simplemente funcionará.

No son como las variables estáticas de C, porque obtienes un nuevo $foo cada vez que llamas al routine (incluso recursivamente). (Perl 5.10 introdujo state variables, que son más bien como un C estático.)

+2

Gracias por ayudarme :-) – rubixibuc

Cuestiones relacionadas