【问题标题】:What is the perl6 equivalent of @INC, please?请问@INC 的perl6 等价物是什么?
【发布时间】:2018-09-12 18:13:23
【问题描述】:

我去

export PERL6LIB="/GitHub/perl6-Units/lib"

然后

echo $PERL6LIB
/GitHub/perl6-Units/lib

但是当我运行perl6 t/01-basic.t

use v6;

use Test;

plan 3;

lives-ok {
    use Units <m>;
    ok @Units::UNITS.elems > 0;
    ok (0m).defined;
} 

done-testing;

我仍然收到错误

===SORRY!===
Could not find Units at line 8 in:
    /Users/--me--/.perl6
    /usr/local/Cellar/rakudo-star/2018.01/share/perl6/site
    /usr/local/Cellar/rakudo-star/2018.01/share/perl6/vendor
    /usr/local/Cellar/rakudo-star/2018.01/share/perl6
    CompUnit::Repository::AbsolutePath<140707489084448>
    CompUnit::Repository::NQP<140707463117264>
    CompUnit::Repository::Perl5<140707463117304>

在 Perl 5 中,我会使用 print "@INC"; 来查看在引发错误之前为 lib 搜索了哪些路径。使用say flat $*REPO.repo-chain.map(*.loaded); 要么是在它加载之前,要么是在它引发异常之后。

任何帮助将不胜感激 - 或者可能是关于在 ~/.perl6 中输入什么的提示,因为我也无法获得符号链接。

【问题讨论】:

  • 旁注:作为 PERL6LIB 的替代品,您也可以use lib 'lib/dir';
  • 啊是的 - 谢谢@donaldh - 我一直依赖于编辑源代码中的所有 use lib 行......因此需要 -I

标签: raku


【解决方案1】:

错误消息本身告诉您可用的库路径是什么。您无法打印它们,因为您希望在编译时错误之前发生运行时操作(say)——您可以在编译时打印出 $*REPO,但再次出现异常已经向您展示了您的内容想要。

$ PERL6LIB="/GitHub/perl6-Units/lib" perl6 -e 'BEGIN say $*REPO.repo-chain; use Foo;'
(file#/GitHub/perl6-Units/lib inst#/Users/ugexe/.perl6 inst#/Users/ugexe/.rakudobrew/moar-2018.08/install/share/perl6/site inst#/Users/ugexe/.rakudobrew/moar-2018.08/install/share/perl6/vendor inst#/Users/ugexe/.rakudobrew/moar-2018.08/install/share/perl6 ap# nqp# perl5#)
===SORRY!===
Could not find Foo at line 1 in:
    /GitHub/perl6-Units/lib
    /Users/ugexe/.perl6
    /Users/ugexe/.rakudobrew/moar-2018.08/install/share/perl6/site
    /Users/ugexe/.rakudobrew/moar-2018.08/install/share/perl6/vendor
    /Users/ugexe/.rakudobrew/moar-2018.08/install/share/perl6
    CompUnit::Repository::AbsolutePath<140337382425072>
    CompUnit::Repository::NQP<140337350057496>
    CompUnit::Repository::Perl5<140337350057536>

您可以看到/GitHub/perl6-Units/lib 出现在可用路径中,这与您的示例不同。我会怀疑你的 shell/env 是否真的设置正确。

【讨论】:

  • 谢谢@ugexe,你的回答是绝对正确的——我使用了两个终端窗口并且没有将 PERL6LIB 添加到我的 .profile 中并重新启动了 shell,所以在第二个窗口中一直失败。现在羞红了脸……
  • 嗨@p6steve 如果您接受 ugexe 的回答,那么您的问题将成为一件好事,因此您可以在 SO 贡献者游戏中/在红脸羞耻中垂头丧气/。 :)
猜你喜欢
  • 1970-01-01
  • 2014-05-08
  • 2014-06-12
  • 1970-01-01
  • 2022-11-28
  • 1970-01-01
  • 1970-01-01
  • 2018-07-10
  • 2023-04-10
相关资源
最近更新 更多