目录/.pm曾经是一个约定,为什么存在?

问题描述 投票:0回答:1

[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;

我喜欢这个,因为这增加了]的好处>

  1. 让所有班级都空话。
  2. use和调用之间添加一致性。
  3. 此设计是出于意图吗?它记录在任何地方吗?以前有没有人想到过这个好主意?

[刚刚弄清楚了,我想知道-M如何处理终端::附加到软件包名称$ perl -MFoo :: -e1我得到的是...无法找到Foo / .pm在@INC中(您可能需要...

perl import module require
1个回答
0
投票

此约定的一个小缺点是,它破坏了Foo/Bar.pm位于Foo/Bar.pm中的先前假设。因此没有终端use::语句不起作用,

© www.soinside.com 2019 - 2024. All rights reserved.