📜  珀尔 |将复杂参数传递给子程序

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

珀尔 |将复杂参数传递给子程序

先决条件: Perl |子程序或函数

Perl函数或子例程是一组共同执行特定任务的语句。在每种编程语言中,用户都希望重用代码。所以用户将这段代码放在一个函数或子程序中,这样就不需要一次又一次地重写相同的代码。出于这个原因,在每种编程语言中都使用函数或子程序。这些函数或子程序可以将各种不同类型的数据结构作为参数。其中一些解释如下:

  1. 将列表或数组传递给子例程
  2. 传递对子例程的引用
  3. 将哈希传递给子程序
  4. 将文件句柄传递给子例程

将列表或数组传递给子例程:数组或列表可以作为参数传递给子例程,数组变量@_ 用于接受子例程或函数内部的列表值。

示例 1:这里将一个列表传递给子例程并显示它们的元素。

#!/usr/bin/perl 
  
# Defining Subroutine
sub Display_List 
{ 
      
    # array variable to store 
    # the passed arguments 
    my @List1 = @_; 
          
    # Printing the passed list elements 
    print "Given list is @List1\n"; 
} 
  
# Driver Code
  
# passing list 
@list = (1, 2, 3, 4); 
  
# Calling Subroutine with 
# list parameter 
Display_List(@list); 
输出:
Given list is 1 2 3 4

示例 2:这里将两个列表传递给子例程并显示它们的元素。

#!/usr/bin/perl 
  
# Defining Subroutine
sub Display_List 
{ 
      
    # array variable to store 
    # the passed arguments 
    my @List3 = @_; 
          
    # Printing the passed lists' elements
    print "Given lists' elements are @List3\n"; 
} 
  
# Driver Code
  
# passing lists
@List1 = (1, 2, 3, 4); 
@List2 = (10, 20, 30, 40); 
  
# Calling Subroutine with 
# list parameters
Display_List(@List1, @List2); 
输出:
Given lists' elements are 1 2 3 4 10 20 30 40

示例 3:这里将标量参数和列表传递给子例程并显示它们的元素。

#!/usr/bin/perl 
  
# Defining Subroutine
sub Display_List 
{ 
      
    # array variable to store 
    # the passed arguments 
    my @List2 = @_; 
          
    # Printing the passed list and scalar elements
    print "List and scalar elements are @List2\n"; 
} 
  
# Driver Code
  
# passing lists
@List = (1, 2, 3, 4); 
  
# passing scalar argument 
$scalar = 100;
  
# Calling Subroutine with 
# list parameters
Display_List(@List, $scalar); 
输出:
List and scalar elements are 1 2 3 4 100

将引用传递给子例程:引用也可以作为参数传递给子例程。这里将给定数组的引用传递给子例程,并返回数组元素的最大值。

例子:

#!/usr/bin/perl
use warnings;
use strict;
  
# Creating an array of some elements
my @Array = (10, 20, 30, 40, 50);
  
# Making reference of the above array
# and calling the subroutine with 
# reference of the array as the parameter
my $m = max(\@Array);
  
# Defining subroutine
sub max
{
      
    # Getting the array elements
    my $Array_ref = $_[0];
    my $k = $Array_ref->[0];
  
    # Iterating over each element of the 
    # array and finding maximum value
    for(@$Array_ref)
    {
        $k = $_ if($k < $_);
    }
    print "The max of @Array is $k\n";
}
输出:
The max of 10 20 30 40 50 is 50

将哈希传递给子例程:哈希也可以作为参数传递给子例程,并显示其键值对。

例子:

#!/usr/bin/perl 
  
# Subroutine definition 
sub Display_Hash 
{ 
      
    # Hash variable to store 
    # the passed arguments 
    my (%Hash_var) = @_; 
          
    # Displaying the passed list elements 
    foreach my $key (keys %Hash_var) 
    { 
        my $value = $Hash_var{$key}; 
        print "$key : $value\n"; 
    } 
} 
  
# Driver Code
  
# defining hash 
%Hash = ('Company' => 'GeeksforGeeks', 
         'Location' => 'Noida'); 
  
# calling Subroutine with hash parameter 
Display_Hash(%Hash); 
输出:
Company : GeeksforGeeks
Location : Noida

将文件句柄传递给子例程:为了创建文件或访问文件内容,需要一个文件句柄,它只是一个结构,它与运算符一起用于以某种模式访问文件,如读取、写入、附加等。 FileHandles 也可以作为参数传递给子例程,以对 Files 执行各种操作。
在下面的示例中,文件句柄被传递给子例程:-
例子:

#!/usr/bin/perl 
     
sub printem
{
    my $file = shift;
   
    while (<$file>) {
         print;
    }
}
   
open(fh, "Hello.txt") or die "File '$filename' can't be opened";
   
printem *fh;
输出: