模块是一个容器, 其中包含一组可以在程序中使用的变量和子例程。每个模块都有一个公共接口, 一组函数和变量。
要在程序中使用模块, 可以使用require或use语句, 尽管它们的语义略有不同。
‘
require’
语句在运行时加载模块, 以避免冗余加载模块。 ‘
use’
语句就像require一样, 具有两个附加属性, 即编译时加载和自动导入。
命名空间是一组不同的标识符(变量, 函数)的容器。命名空间就像name :: variable。
每段Perl代码都在一个命名空间中。
在以下代码中,
use strict;
use warnings;
my $x = "Hello";
$main::x = "Bye";
print "$main::x\n";
# Bye
print "$x\n";
# Hello
这是定义为x的两个不同变量。 $ main :: x是一个包变量, 而$ x是一个词法变量。通常, 我们使用用我的关键字声明的词法变量, 并使用命名空间分隔函数。
在上面的代码中, 如果我们不使用use strict, 则会收到警告消息, 因为
Name"main::x" used only once: possible typo at line..
主要是当前脚本和当前变量的命名空间。我们还没有写任何东西, 但是我们已经在’ main’ 命名空间中了。
通过添加” use strict” , 现在我们得到以下错误,
Global symbol "$x" requires explicit package name
在此错误中, 我们得到了一个新词” package” 。它表明我们在声明变量之前忘记使用’ my’ 关键字, 但实际上它表明我们应提供该变量所在的包的名称。
使用package关键字的Perl交换命名空间看下面的代码,
use strict;
use warnings;
use 5.010;
sub hii {
return "main";
}
package two;
sub hii {
return "two";
}
say main::hii();
# main
say two::hii();
# two
say hii();
# two
package main;
say main::hii();
# main
say two::hii();
# two
say hii();
# main
在这里, 我们使用package关键字从” main” 命名空间切换到” two” 命名空间。
用命名空间调用hii()会返回各自的命名空间。就像, 说main :: hii(); 返回’ main’ 并说两个:: hii(); 返回” 二” 。
【Perl模块和命名空间】调用没有命名空间前缀的hii()会返回当前命名空间本地的函数。第一次, 我们在” two” 命名空间中。因此, 它返回了” 两个” 。第二次, 我们使用包main切换了命名空间。因此, 它返回” main” 。
推荐阅读
- Perl多维数组
- Perl last语句
- Perl入门简介
- Perl if-else语句
- Perl最新面试题全集
- Perl哈希用法详解
- Perl创建Excel文件
- Perl goto语句
- Perl for循环语句