我的本地分布如下:

.
├── META6.json
└── lib
    └── Foo.pm6
perl6 -I. -e 'use Foo;'perl6 -Ilib -e 'use Foo;'都可以编译并运行,所以我应该使用哪一个?为什么?

最佳答案

提出此问题的另一种方式是“-I $ dir-with-meta6-file和-I $ dir-without-meta6-file有什么区别?”。在这个答案中,-I.将在技术上指的是-I $dir-with-meta6-file,而-Ilib将指的是-I $dir-without-meta6-file。另请注意,这涵盖了use lib '.'use lib 'lib'-I.-Ilib之间的区别可以简要总结如下:

  • -I.将在META6.json上查找提供的文件/ namespace 及其版本/api/auth
  • -Ilib提供所有现有文件并将它们映射到可预测的 namespace (Foo/Bar.pm6-> Foo::Bar),并将匹配任何版本/api/auth

  • 通常,在开发过程中(尤其是在启动时)会使用-Ilib,因为它比手动在META6.json文件中添加/删除条目更容易。如果您正在编写本地应用程序或不打算安装的内容,则通常可以。

    然而!一旦为分发创建了-I.文件,就应该首选META6.json。手动维护可能需要更多的工作,但是它具有一些优点:
  • 它提供了将要安装的一些基本保证。我看到的一个常见问题是模块通过了测试,但未能真正安装,因为安装时的预编译只能访问META6.json文件中列出的文件。
  • 它允许将多个 namespace 映射到单个文件(我不鼓励这样做)。
  • 您可以将Perl .pm文件旁边的Perl .pm6文件作为一种双语言分布,因为您可以明确告诉Perl6要使用哪些文件。 -Ilib必须将所有.pm.pm6文件都视为Perl6,这与该想法不兼容。
  • 10-07 14:58