我看了一下Mojo :: Loader的代碼,結果證明它不能導入東西。它僅執行require
(在字符串評估中),而不是use
。快速的源代碼顯示沒有任何import
,所以您需要自己撥打Your::Module->import
。
Here's a link的源代碼和報價的相關部分:
sub load {
my ($self, $module) = @_;
# Check module name
return 1 if !$module || $module !~ /^\w(?:[\w:']*\w)?$/;
# Load
return undef if $module->can('new') || eval "require $module; 1";
# Exists
return 1 if [email protected] =~ /^Can't locate \[email protected]{[class_to_path $module]}\E in \@INC/;
# Real error
return Mojo::Exception->new([email protected]);
}
有這裏發生了一些有趣的事情。如果您的文件爲use foo
,則導入使用常量。
use foo;
print 'True: ', TRUE;
但是:
require foo;
foo->import;
print 'True: ', TRUE;
這將產生一個警告Bareword "TRUE" not allowed while "strict subs" in use
。所以我們把TRUE()
看起來不像是一個空話。畢竟,常數是一個子。現在它會工作。 Mojo::Loader->load('foo')
也是如此。
如果您在require
和import
周圍包圍BEGIN
塊,則可以省略括號。
因此,如果你想導出常量,如果你想繼續使用Mojo :: Loader,可以將括號加到你稱之爲的地方。
請在導出常量的地方添加模塊代碼的相關部分。 – simbabque
@simbabque檢查更新後的問題 – PMat
您有使用Mojo模塊的原因嗎? – simbabque