Ответ 1
Подстройка MAIN
должна быть объявлена вне модуля, но она все равно должна иметь возможность видеть process
.
Существует несколько способов достижения этого, например, не объявляя модуль вообще
sub process(@filenames) {
for @filenames -> $filename {
say "Processing '$filename'";
}
}
sub MAIN(*@filenames) {
process(@filenames);
}
сделав process
наш охват и называя его своим длинным именем
module main {
our sub process(@filenames) {
for @filenames -> $filename {
say "Processing '$filename'";
}
}
}
sub MAIN(*@filenames) {
main::process(@filenames);
}
или экспортируя process
и импортируя его в тело MAIN
module main {
sub process(@filenames) is export {
for @filenames -> $filename {
say "Processing '$filename'";
}
}
}
sub MAIN(*@filenames) {
import main;
process(@filenames);
}
На мой взгляд, наиболее подходящим вариантом является добавить MAIN
в модуль и импортировать его в основную сеть script. Таким образом, все, что объявлено в модуле, видимо в пределах MAIN
без явного экспорта всего:
module main {
sub process(@filenames) {
for @filenames -> $filename {
say "Processing '$filename'";
}
}
sub MAIN(*@filenames) is export(:MAIN) {
process(@filenames);
}
}
import main :MAIN;
Обратите внимание, что это не экспортирует MAIN
по умолчанию, то есть пользователи вашего модуля получат его только в том случае, если они содержат тег :MAIN
.