命名空间或包是否相同?我在只有包的地方使用 Perl。我知道还有其他编程语言也包含模块。
有什么不同?
该package
指令设置命名空间。因此,命名空间也称为包。
Perl 没有正式的模块定义。有很多差异,但以下内容适用于绝大多数模块:
.pm
扩展名的文件。package
涵盖整个代码的声明。(但见下文。)package
。遇到.pm
包含多个包的文件并不少见。无论是单个模块、多个模块还是两者都有,还有待商榷。
Namespace
是一个通用计算术语,表示一组不同标识符的容器。同一个标识符可以独立出现在不同的命名空间中并引用不同的对象,一个明确标识对象的完全限定标识符由命名空间加上标识符组成。
Perl 使用package
关键字实现命名空间。
Perl模块完全是另一回事。它是一段 Perl 代码,可以使用use
关键字合并到任何程序中。文件名应该以.pm
- for Perl M odule结尾,并且它包含的代码应该有一个使用与文件名等效的包名的语句,包括它的路径。例如,写在一个名为的文件中的模块应该有一个类似.package
My/Useful/Module.pm
package
package My::Useful::Module
您可能一直在想的是一个类,它又是一个通用的计算术语,这一次意味着一种面向对象的数据。Perl 使用它的包作为类名,面向对象的模块将有一个构造子程序——通常被称为new
——它会返回一个对数据的引用,blessed
以使其以面向对象的方式运行。绝不是所有 Perl 模块都是面向对象的:有些可以是简单的子程序库。