Perl教程
Perl控制语句
Perl高级

Perl 模块和命名空间

Perl 模块和命名空间

模块是一个容器,其中包含一组可在程序中使用的变量和子例程。每个模块都有一个公共接口、一组函数和变量。
要在程序中使用模块,可以使用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..
ma​​in 是当前脚本和当前变量的命名空间。我们还没有写任何东西,但我们已经在 'main' 命名空间中。
通过添加 'use strict',现在我们得到了以下错误,
Global symbol "$x" requires explicit package name
在这个错误中,我们得到了一个新词"包"。这表明我们在声明变量之前忘记使用 'my' 关键字,但实际上它表明我们应该提供变量所在的包的名称。

Perl Switching namespace using package keyword

看下面的代码,
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()返回各自的命名空间。比如,say main::hii(); 返回'main',say two::hii(); 返回'two'。
调用hii() 没有命名空间前缀,返回当前命名空间的本地函数。第一次,我们在"两个"命名空间中。因此它返回了"二"。第二次,我们使用 package main 切换命名空间。 因此它返回 'main'。
昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4