-I. 和有什么区别?和 Perl6 中的 -Ilib?
What is the difference between -I. and -Ilib in Perl6?
我有一个本地分布如下:
.
├── META6.json
└── lib
└── Foo.pm6
perl6 -I. -e 'use Foo;'
和 perl6 -Ilib -e 'use Foo;'
都编译并且 运行,那么我应该使用哪一个,为什么?
问这个问题的另一种方式是 "What is the difference betweening -I $dir-with-meta6-file and -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
中寻找 files/namespaces 提供的内容及其 version/api/auth
-Ilib
提供所有现有文件并将它们映射到可预测的命名空间 (Foo/Bar.pm6
-> Foo::Bar
) 并将匹配任何 version/api/auth
通常在开发时使用 -Ilib
,特别是在开始时,因为它比在 META6.json
文件中手动 adding/removing 条目更容易。如果您正在编写本地应用程序或不打算安装的东西,这基本上没问题。
但是!一旦为分发创建了 META6.json
文件,应该首选 -I.
。手动维护可能会稍微多一些工作,但它有一些优点:
它提供了一些基本的安装保证;我看到的一个常见问题是模块通过了测试但未能实际安装,因为安装时的预编译只能访问 META6.json
文件中列出的文件。
它允许将多个命名空间映射到一个文件(我不鼓励这样做)。
您可以将 Perl .pm
文件放在 Perl6 .pm6
文件旁边作为一种双语言分发,因为您可以明确地告诉 Perl6 使用哪些文件。 -Ilib
必须将所有 .pm
和 .pm6
文件视为 Perl6,这与这个想法不兼容。
我有一个本地分布如下:
.
├── META6.json
└── lib
└── Foo.pm6
perl6 -I. -e 'use Foo;'
和 perl6 -Ilib -e 'use Foo;'
都编译并且 运行,那么我应该使用哪一个,为什么?
问这个问题的另一种方式是 "What is the difference betweening -I $dir-with-meta6-file and -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
中寻找 files/namespaces 提供的内容及其 version/api/auth-Ilib
提供所有现有文件并将它们映射到可预测的命名空间 (Foo/Bar.pm6
->Foo::Bar
) 并将匹配任何 version/api/auth
通常在开发时使用 -Ilib
,特别是在开始时,因为它比在 META6.json
文件中手动 adding/removing 条目更容易。如果您正在编写本地应用程序或不打算安装的东西,这基本上没问题。
但是!一旦为分发创建了 META6.json
文件,应该首选 -I.
。手动维护可能会稍微多一些工作,但它有一些优点:
它提供了一些基本的安装保证;我看到的一个常见问题是模块通过了测试但未能实际安装,因为安装时的预编译只能访问
META6.json
文件中列出的文件。它允许将多个命名空间映射到一个文件(我不鼓励这样做)。
您可以将 Perl
.pm
文件放在 Perl6.pm6
文件旁边作为一种双语言分发,因为您可以明确地告诉 Perl6 使用哪些文件。-Ilib
必须将所有.pm
和.pm6
文件视为 Perl6,这与这个想法不兼容。