📜  Perl函数和子例程

📅  最后修改于: 2021-01-07 08:34:04             🧑  作者: Mango

Perl函数和子例程

Perl函数和子例程用于重用程序中的代码。你可以在不同的参数应用程序的几个地方使用的函数。

函数和子例程只有一个区别,子例程是使用sub关键字创建的,并且返回一个值。您可以将代码分成单独的子例程。从逻辑上讲,每个部门的每个函数都应执行特定任务。

子程序的语法:

sub subName{
body
}

Perl定义和调用子例程函数

Perl定义子例程函数的语法如下:

sub subName{
body
}
   OR
subName(list of arguments);
&subName(list of arguments);

在下面的示例中,我们定义一个子例程函数“ myOffice”并调用它。

#defining function
sub myOffice{
   print "javaTpoint!\n";
}
# calling Function 
myOffice();

输出:

javaTpoint!

具有参数的Perl子例程功能

您可以在子例程中传递任意数量的参数。参数在特殊的@_ list数组变量中作为列表传递。因此,该函数的第一个参数为$ _ [0],第二个参数为$ _ [1],依此类推。

在此示例中,我们通过传递单个参数来计算正方形的周长。

$squarePerimeter = perimeter(25);
print("This is the perimter of a square with dimension 25: $squarePerimeter\n");  
sub perimeter {
    $dimension = $_[0];
    return(4 * $dimension);
 }

输出:

100

带列表的Perl子例程

这里的@_变量是一个数组,因此它用于向子例程提供列表。我们用list声明了一个数组'a'并调用它。

sub myList{
   my @list = @_;
   print "Here is the list @list\n";
}
@a = ("Orange", "Pineapple", "Mango", "Grapes", "Guava");
# calling function with list
myList(@a);

输出:

Here is the list Orange Pineapple Mango Grapes Guava

带哈希的Perl子例程

当哈希传递给子例程时,哈希将自动转换为其键-值对。

sub myHash{
   my (%hash) = @_;
   foreach my $key ( keys %hash ){
      my $value = $hash{$key};
      print "$key : $value\n";
   }
}
%hash = ('Carla' => 'Mother', 'Ray' => 'Father', 'Ana' => 'Daughter', 'Jose' => 'Son');
# Function call with hash parameter
myHash(%hash);

输出:

Ray : Father
Jose : Son
Carla : Mother
Ana : Daughter

Perl子例程局部和全局变量

默认情况下,所有变量都是Perl内部的全局变量。但是您可以使用“ my”关键字在函数内创建局部变量或私有变量。

“ my”关键字将变量限制为可以在其中使用和访问它的特定代码区域。在此区域之外,不能使用此变量。

在下面的示例中,我们同时显示了局部变量和全局变量。首先,$ str在本地被称为(AAABBBCCCDDD),然后在全球被称为(AEIOU)。

$str = "AEIOU";
sub abc{
   # Defining local variable
   my $str;
   $str = "AAABBBCCCDDD";
   print "Inside the function local variable is called $str\n";
}
# Function call
abc();
print "Outside the function global variable is called $str\n";

输出:

Inside the function local variable is called AAABBBCCCDDD 
Outside the function global variable is called AEIOU