珀尔 |将复杂参数传递给子程序
先决条件: Perl |子程序或函数
Perl函数或子例程是一组共同执行特定任务的语句。在每种编程语言中,用户都希望重用代码。所以用户将这段代码放在一个函数或子程序中,这样就不需要一次又一次地重写相同的代码。出于这个原因,在每种编程语言中都使用函数或子程序。这些函数或子程序可以将各种不同类型的数据结构作为参数。其中一些解释如下:
- 将列表或数组传递给子例程
- 传递对子例程的引用
- 将哈希传递给子程序
- 将文件句柄传递给子例程
将列表或数组传递给子例程:数组或列表可以作为参数传递给子例程,数组变量@_ 用于接受子例程或函数内部的列表值。
示例 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;
输出: