Perl 包
一个Perl包是一个代码的集合,它驻留在自己的命名空间中。Perl模块是在一个文件中定义的包,该文件的名字与包的名字相同,扩展名为 .pm。 两个不同的模块可以包含一个相同名称的变量或函数。任何不包含在任何包中的变量都属于主包。因此,所有正在使用的变量都属于 “主 “包。通过对额外包的声明,可以保持不同包中的变量不会相互干扰。
Perl模块的声明
模块的名称必须与包的名称相同,并且有一个.pm的扩展名。
例如:Calculator.pm
package Calculator;
# Defining sub-routine for Addition
sub addition
{
# Initializing Variables a & b
a =_[0];
b =_[1];
# Performing the operation
a =a + b;
# Function to print the Sum
print "\n***Addition isa";
}
# Defining sub-routine for Subtraction
sub subtraction
{
# Initializing Variables a & b
a =_[0];
b =_[1];
# Performing the operation
a =a - b;
# Function to print the difference
print "\n***Subtraction isa";
}
1;
这里,文件的名称是 “Calculator.pm”,存储在Calculator目录下。请注意,在代码的末尾写了1;,以便向解释器返回一个真值。Perl接受任何为真值的东西,而不是1。
使用 Perl 模块
为了使用这个计算器模块,我们使用 require 或 use 函数。要从一个模块中访问一个函数或一个变量,可以使用 :: 。下面是一个示范性的例子:
例子:Test.pl
#!/usr/bin/perl
# Using the Package 'Calculator'
use Calculator;
print "Enter two numbers to add";
# Defining values to the variables
a = 10;b = 20;
# Subroutine call
Calculator::addition(a,b);
print "\nEnter two numbers to subtract";
# Defining values to the variables
a = 30;b = 10;
# Subroutine call
Calculator::subtraction(a,b);
输出:
从不同的目录访问软件包
如果访问软件包的文件位于目录之外,那么我们用’:’来告诉模块的路径。例如,使用计算器模块的文件在计算器包之外,所以我们写Calculator ::Calculator来加载模块,其中’::’左边的值代表包名,’:’右边的值代表Perl模块名。让我们看一个例子来理解这个问题。
例子:计算器目录外的Test_out_package.pl
#!/usr/bin/perl
use GFG::Calculator; # Directory_name::module_name
print "Enter two numbers to add";
# Defining values to the variables
a = 10;b = 20;
# Subroutine call
Calculator::addition(a,b);
print "\nEnter two numbers to subtract";
# Defining values to the variables
a = 30;b = 10;
# Subroutine call
Calculator::subtraction(a,b);
输出:
使用来自模块的变量
来自不同包的变量可以通过在使用前声明来使用。下面的例子演示了这一点
例子:Message.pm
#!/usr/bin/perl
package Message;
# Variable Creation
username;
# Defining subroutine
sub Hello
{
print "Hellousername\n";
}
1;
访问模块的Perl文件如下 :
示例:variable.pl
#!/usr/bin/perl
# Using Message.pm package
use Message;
# Defining value to variable
$Message::username = "ABC";
# Subroutine call
Message::Hello();
输出:
BEGIN和END块
BEGIN和END块是在我们想在开始时运行一部分代码,在结束时运行一部分代码时使用的。写在BEGIN{…}中的代码在脚本的开头执行,而写在END{…}中的代码则在脚本的结尾执行。下面的程序演示了这一点:
示例:begineg.pl
#!/usr/bin/perl
# Predefined BEGIN block
BEGIN
{
print "In the begin block\n";
}
# Predefined END block
END
{
print "In the end block\n";
}
print "Hello Perl;\n";
输出
In the begin block
Hello Perl;
In the end block