2010-09-09 8 views
5

Qualcuno può spiegarmi il seguente codice. Questo comportamento è stato così per un po '(testato su 5.8.5, 5.8.8, 5.10.1, 5.12.2) quindi ci deve essere una ragione dietro di esso?

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

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

Grazie.

+0

grazie a rafl e brian d foy, avrei dovuto ricontrollare perldoc strict first. – est

+0

Sentiti libero di accettare una delle risposte, anche se devi tirare i dadi. Renderà quel 44% sotto il tuo nome un po 'più grande. :) –

risposta

15

Questo è nella documentazione strict:

A causa del loro uso speciale da sort(), le variabili $ ae $ b sono esenti da questo controllo.

Controllare sempre the docs. La maggior parte delle risposte sono lì :)

11

$a (e anche $b e molti altri) è una variabile globale. È destinato a essere utilizzato nella funzione sort, ad es. sort { $a <=> $b } @list. perldoc perlvar elenca tutti i globali incorporati di perl e il loro significato.

+2

In realtà, credo che $ a e $ b siano 'globuli globali' piuttosto che completi su globalmente globali (se questo ha senso). Vedi [perldoc sort] (http://perldoc.perl.org/functions/sort.html) dove dice "... gli elementi da confrontare vengono passati alla subroutine come le variabili globali del pacchetto $ ae $ b. .. ". –

+0

Sì, sono globali che non sono forzati nello spazio dei nomi main :: come alcuni altri globals come, ad esempio, '$ _'. – rafl

Problemi correlati