📜  Perl 中的包

📅  最后修改于: 2022-05-13 01:55:07.176000             🧑  作者: Mango

Perl 中的包

Perl 包是驻留在其自己的命名空间中的代码集合。 Perl 模块是定义在一个文件中的包,该文件与包同名,扩展名为.pm 。两个不同的模块可能包含同名的变量或函数。任何不包含在任何包中的变量都属于主包。因此,所有正在使用的变量都属于“主”包。通过附加包的声明,保持不同包中的变量不会相互干扰。

Perl 模块的声明

模块名称必须与包名称相同,并具有 .pm 扩展名。

示例:计算器.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 is $a";
}
  
# 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 is $a";
}
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包之外,所以我们写Calculator :: Calculator来加载模块,其中'::'左侧的值表示包名,'::'右侧的值表示Perl模块姓名。让我们看一个例子来理解这一点:

示例:Test_out_package.pl 在 Calculator 目录之外

#!/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 "Hello $username\n";
}
1;

访问模块的 Perl 文件如下
示例:变量.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{…} 中编写的代码在脚本末尾执行。下面的程序演示了这一点:
示例: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