2010-09-09 8 views
5

Kann mir bitte jemand den folgenden Code erklären. Dieses Verhalten war schon eine Weile so (getestet auf 5.8.5, 5.8.8, 5.10.1, 5.12.2), also muss es einen Grund geben?

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

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

Danke.

+0

danke rafl und brian d foy, ich hätte Perldoc zuerst streng überprüfen sollen. – est

+0

Fühlen Sie sich frei, eine der Antworten zu akzeptieren, auch wenn Sie würfeln müssen. Dadurch werden 44% unter deinem Namen etwas größer. :) –

Antwort

15

Dies ist in der strict Dokumentation:

Aufgrund ihrer besonderen Verwendung von sort(), sind die Variablen $ a und $ b von dieser Prüfung ausgenommen.

Überprüfen Sie immer the docs. Die meisten Antworten sind da drin :)

11

$a (und auch $b und viele andere) ist eine globale Variable. Es ist beabsichtigt, in der sort-Funktion verwendet zu werden, z.B. sort { $a <=> $b } @list. perldoc perlvar listet alle integrierten Perl-Funktionen und deren Bedeutung auf.

+2

Eigentlich glaube ich, dass $ a und $ b "Paket-Globals" sind anstatt voll auf globale Globals (wenn das irgendeinen Sinn macht). Siehe [perldoc sort] (http://perldoc.perl.org/functions/sort.html), wo es heißt "... die zu vergleichenden Elemente werden als globale Paketvariablen $ a und $ b in die Subroutine übernommen. .. ". –

+0

Ja, sie sind globale Variablen, die nicht wie einige andere globale Variablen in den namespace main gezwungen werden, wie zum Beispiel '$ _'. – rafl

Verwandte Themen