尝试在运行时管理Perl6的$ * REPO

时间:2018-06-28 18:47:00

标签: repository perl6 code-documentation

在Perl 6中复制FindBin::libs的行为。

  (1) Start from `$Bin`.
  (2) Search for `./lib` dir's above it.
  (3) prefix them to the search list.

在P6中,这需要管理$*REPO,我认为需要使用CompUnit::RepositoryRegistry,但是我无法在modules.perl6.org(可能是因为它是核心)或docs上找到任何文档。 perl6.org。

问:CompUnit::RepositoryRegistry是否正确,是将某些新目录添加到$*REPO管理的列表的前缀?

问:如果是这样,CU::RR在哪里记录?

问:如果没有,我应该使用什么?

谢谢

1 个答案:

答案 0 :(得分:5)

查找lib/文件夹仅适用于CompUnit::Repository::FileSystem存储库-不适用于CompUnit::Repository::Installation存储库(已安装模块)。

话虽如此,但以下可能性是可能的:

~/repos/rakudo$ perl6 -e '\
    say $*REPO.repo-chain.grep(* ~~ CompUnit::Repository::FileSystem);\
    my $lib = CompUnit::Repository::FileSystem.new(prefix => $*CWD.parent.absolute);\
    CompUnit::RepositoryRegistry.use-repository($lib);\
    say $*REPO.repo-chain.grep(* ~~ CompUnit::Repository::FileSystem)
'
()
(file#/Users/ugexe/repos)

我不确定在编译时间之外修改$*REPO是多么明智。我希望至少有一些重要的预补偿处罚。如果不一定要运行时,则可以选择以下选项:

~/repos/rakudo$ perl6 -e '\
    BEGIN say $*REPO.repo-chain.grep(* ~~ CompUnit::Repository::FileSystem);\
    BEGIN my $lib = $*CWD.parent.absolute;\
    BEGIN use lib $lib;\
    say $*REPO.repo-chain.grep(* ~~ CompUnit::Repository::FileSystem)
'
()
(file#/Users/ugexe/repos)