require
- это не sub, а скорее оператор управления (то есть, в той же категории вещей, как use
, if
, for
и т. Д.). Он анализируется Perl6 грамматика и есть несколько разных случаев, которые принимаются.Он скомпилирован в действиях Perl 6 , который имеет достаточно много для обработки.
Большая часть работы делегирована различным CompUnit
объектам, которые также связаны с use
/ need
.Также необходимо позаботиться о заглушке символов, которые принесет require
, поскольку набор символов в заданной лексической области видимости фиксируется во время компиляции, а вспомогательная подсистема REQUIRE_IMPORT
также участвует в импорте символов времени выполнения.
Ответ на ваш вопрос о том, что он будет оценивать, дается в конце метода:
$past.push($<module_name>
?? self.make_indirect_lookup($longname.components())
!! $<file>.ast);
Что означает:
- Если это было
require Some::Module
, затем оцените поиск в Some::Module
- Если это был случай в стиле
require $file
, оцените имя файла