何时评估“use lib PATH”?

Fri*_*ker 9 raku

我想从我的脚本中设置 Raku 和 Inline::Perl5 模块的库加载路径,同时最大限度地减少运行时影响。

我尝试更换

use lib $*PROGRAM.resolve.parent(2) ~ '/lib';
use lib $*PROGRAM.resolve.parent(2) ~ '/Inline/perl5';
Run Code Online (Sandbox Code Playgroud)

它适用于以下内容:

BEGIN {
    my $root = $*PROGRAM.resolve.parent(2);
    use lib "$root/lib";
    use lib "$root/Inline/perl5";
Run Code Online (Sandbox Code Playgroud)

以节省第二次.resolve.parent(2)通话。这不起作用,因为在评估行时$root似乎未定义。use lib

uge*_*exe 6

use lib是编译时间。当你写的时候

BEGIN {
    my $root = $*PROGRAM.resolve.parent(2);
    use lib "$root/lib";
}
Run Code Online (Sandbox Code Playgroud)

里面use lib "$root/lib"的a本质上BEGIN是编译-编译时间。你需要写的是

BEGIN {
    BEGIN my $root = $*PROGRAM.resolve.parent(2);
    use lib "$root/lib";
}
Run Code Online (Sandbox Code Playgroud)

或者更简洁地说

BEGIN my $root = $*PROGRAM.resolve.parent(2);
use lib "$root/lib";
Run Code Online (Sandbox Code Playgroud)