perl中的命名空间,包和模块有什么区别?

use*_*308 11 perl

命名空间或包是一样的吗?我使用Perl,我们只有包.我知道还有其他编程语言也包含模块.

有什么不同?

ike*_*ami 17

package指令设置名称空间.因此,命名空间也称为包.

Perl没有正式的模块定义.存在很多差异,但以下适用于绝大多数模块:

  • .pm扩展名的文件.
  • 该文件包含一个package涵盖整个代码的声明.(但见下文.)
  • 该文件基于由该命名的命名空间命名package.
  • 该文件在执行时应返回true值.
  • 该文件预计每个解释器执行不超过一次.

遇到.pm包含多个包的文件并不罕见.无论是单个模块,多个模块还是两者都有争议.


Bor*_*din 15

Namespace是一个通用计算术语,表示不同标识符集的容器.相同的标识符可以独立地出现在不同的名称空间中并引用不同的对象,并且明确标识对象的完全限定的标识符由名称空间和标识符组成.

Perl使用package关键字实现名称空间.

Perl 模块完全不同.它是一段Perl代码,可以使用use关键字合并到任何程序中.文件名应以结束.pm-为P ERL 中号 odule -它包含的代码应该有一个package使用的是等效于文件的名称,包括它的路径包名声明.例如,在一个被调用的文件中编写的模块My/Useful/Module.pm应该有一个package类似的语句package My::Useful::Module.

您可能一直在考虑的是一个,它同样是一个通用计算术语,这一次意味着一种面向对象的数据.Perl使用它的包作为类名,面向对象的模块将有一个构造函数子程序 - 通常称为new- 将返回对数据的引用,blessed使其以面向对象的方式运行.绝不是所有的Perl模块都是面向对象的:一些可以是简单的子程序库.