Не говорите никому, что я говорил вам это, но специальные переменные Perl
доступно везде Вы, наверное, заметили, что это не
работа:
{ package Foo;
our $global = 42; }
{ package Bar;
say "global is $global"; }
Это потому, что $global
на самом деле называется $Foo::global
. Вы имеете
также, вероятно, заметил, что это «правило» не относится к таким вещам, как
@INC
, %ENV
, $_
и т. Д. Это потому, что эти переменные всегда
предполагается в main
.
Но на самом деле, это больше, чем просто эти переменные. Весь шар
становится «вынужденным» в main
. Это означает, что вы можете написать что-то вроде
это:
{ package Constants;
$_{PI} = 3.141592; }
{ package Foo;
say "pi is $_{PI}"; }
и это будет работать.
(То же самое относится к $ENV
, &INC
и т. Д.)
Если вы когда-нибудь сделаете это в реальном коде, ожидайте, что кто-то убьет вас
:) Приятно знать, хотя, на всякий случай, если вы видите кого-то еще
делает это.