[Having just figured out this,我想知道-M
如何处理贴在程序包名称上的终端::
,
$ perl -MFoo:: -e1
我得到的是...
无法在
Foo/.pm
中找到@INC
(您可能需要安装Foo::
模块)(@INC
包含:[...])。
这似乎表明它不起作用,所以好奇心迫使我....
$ mkdir Foo;
$ echo "package Foo { sub k { die 42 } }; 1;" > Foo/.pm
$ PERL5LIB=. perl -MFoo:: -e'Foo::->k'
这确实有效。是否支持use mod::;
解析为mod/.pm
的约定?这是古代的遗留物吗?这种行为是从哪里来的?
有了这个模式,我可以做,
Foo/.pm # package Foo
Foo/Bar/.pm # package Foo::Bar
Foo/Bar/Baz/.pm # package Foo::Bar::Baz;
然后我可以做
use Foo::; # resolves to Foo/.pm
use Foo::Bar::; # resolves to Foo/Bar/.pm
use Foo::Bar::Baz::; # resolves to Foo/Bar/Baz/.pm
Foo::->new;
Foo::Bar::->new;
Foo::Bar::Baz::->new;
我喜欢这个,因为这增加了]的好处>
use
和调用之间添加一致性。此设计是出于意图吗?它记录在任何地方吗?以前有没有人想到过这个好主意?
[刚刚弄清楚了,我想知道-M如何处理终端::附加到软件包名称$ perl -MFoo :: -e1我得到的是...无法找到Foo / .pm在@INC中(您可能需要...
此约定的一个小缺点是,它破坏了Foo/Bar.pm
位于Foo/Bar.pm
中的先前假设。因此没有终端use
的::
语句不起作用,