Что означает блок кода после «использования модуля»? - PullRequest
6 голосов
/ 21 июля 2010

Каково значение и каков эффект чего-то подобного (я думаю, что это объектно-ориентированное):

use My::Confusing::Code
{
   CITY  => { MODIFY      => 1,           
              DEFAULT     => My::Even::more::complicated->func(), 
            },
   STATE => { MODIFY      => 1,           
              DEFAULT     => 'Concatenate()', 
            },
   COUNTRY => { MODIFY       => 1,
                REQUIRED     => 0,
                DEFAULT      => 'Gabon',
               }, 
}

Что бы сделал пакет / модуль / класс My :: Confusing :: Codeс вещами в фигурных скобках.Включают ли фигурные скобки блок кода или ссылку на хеш?

1 Ответ

13 голосов
/ 21 июля 2010

Это ссылка на хеш.

Когда вы делаете use Module::Foo @stuff;, то, что происходит за кадром:

BEGIN { 
    require "Module/Foo.pm";
    Module::Foo->import( @stuff );
};

Обычно используются параметры, переданные importпопросить экспортировать символы в ваше пространство имен.(Типичный способ сделать это - использовать подпрограмму import из стандартного модуля Exporter .) Но в этом случае автор модуля написал собственный метод import, который принимает хеш-код и выполняетнаберись.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...