2010-09-09 20 views
5

¿Puede alguien explicarme el siguiente código. Este comportamiento ha sido así durante un tiempo (probado en 5.8.5, 5.8.8, 5.10.1, 5.12.2), por lo que debe haber una razón detrás de esto.

$ perl -M5.012 -E '$aa=2' 
Global symbol "$aa" requires explicit package name at -e line 1. 

$ perl -M5.012 -E '$a=2' 

Thanks.

+0

gracias rafl y brian d foy, debería haber verificado nuevamente el estricto perldoc primero. – est

+0

No dude en aceptar una de las respuestas, incluso si tiene que tirar los dados. Hará que un 44% debajo de tu nombre sea un poco más grande. :) –

Respuesta

15

Esto es en la documentación strict:

Debido a su uso especial sort(), las variables $ ay $ b están exentos de esta comprobación.

Siempre revise the docs. La mayoría de las respuestas están ahí :)

11

$a (y también $b, y muchos otros) es una variable global. Está destinado a ser utilizado en la función sort, p. sort { $a <=> $b } @list. perldoc perlvar enumera todas las variables globales integradas de perl y su significado.

+2

En realidad, creo que $ a y $ b son 'paquetes globales' en lugar de completos en globales (si eso tiene sentido). Consulte [perldoc sort] (http://perldoc.perl.org/functions/sort.html) donde dice "... los elementos que se van a comparar se pasan a la subrutina como las variables globales del paquete $ a y $ b. .. ". –

+0

Sí, son globales que no están forzados en el espacio de nombres main :: como algunos otros globales como, por ejemplo, '$ _'. – rafl

Cuestiones relacionadas