perl中名称空间、包和模块之间的区别是什么?

perl中名称空间、包和模块之间的区别是什么?,perl,Perl,命名空间或包是否相同?我在只有包的地方使用Perl。我知道还有其他编程语言也包括模块 有什么区别?指令设置名称空间。因此,名称空间也称为包 Perl没有模块的正式定义。虽然存在很多差异,但以下内容适用于绝大多数模块: 扩展名为.pm的文件 该文件包含一个包含整个代码的包声明。(但请参见下文。) 该文件是基于该包所命名的命名空间命名的 该文件在执行时应返回一个真值 每个解释器最多执行一次该文件 遇到包含多个包的.pm文件并不罕见。无论是单个模块、多个模块还是两者都有争议。名称空间是一个通用的计

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


有什么区别?

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

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

  • 扩展名为
    .pm
    的文件
  • 该文件包含一个包含整个代码的
    声明。(但请参见下文。)
  • 该文件是基于该
    包所命名的命名空间命名的
  • 该文件在执行时应返回一个真值
  • 每个解释器最多执行一次该文件

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

名称空间是一个通用的计算术语,意思是一组不同标识符的容器。同一标识符可以独立出现在不同的名称空间中,并引用不同的对象,而明确标识对象的完全限定标识符由名称空间和标识符组成

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

Perl模块完全是另一回事。它是一段Perl代码,可以用
use
关键字合并到任何程序中。文件名应该以
.pm
-对于PerlM模块-结尾,并且它包含的代码应该有一个
package
语句,使用与文件名(包括其路径)等效的包名。例如,在名为
My/usive/module.pm的文件中编写的模块应该有
package
语句,如
package My::usive::module


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

我想,您应该阅读一下。它将揭示Perl的许多有趣的特性