11

命名空间或包是否相同?我在只有包的地方使用 Perl。我知道还有其他编程语言也包含模块。

有什么不同?

4

2 回答 2

17

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

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

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

遇到.pm包含多个包的文件并不少见。无论是单个模块、多个模块还是两者都有,还有待商榷。

于 2013-01-07T05:53:35.673 回答
16

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

Perl 使用package关键字实现命名空间。

Perl模块完全是另一回事。它是一段 Perl 代码,可以使用use关键字合并到任何程序中。文件名应该以.pm- for Perl M odule结尾,并且它包含的代码应该有一个使用与文件名等效的包名的语句,包括它的路径。例如,写在一个名为的文件中的模块应该有一个类似.packageMy/Useful/Module.pmpackagepackage My::Useful::Module

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

于 2013-01-07T06:13:08.817 回答