
Perl子例程是用户定义的函数.
Perl子例程是一段执行特殊任务的分离代码,它可以减少重复代码并使程序易于阅读.
Perl子例程可以出现在程序中的任何位置. 语法如下:
sub subroutine{
statements;
}
调用子程序的语法格式:
subroutine( 参数列表 );
在Perl 5.0以下版本中调用子例程的方法如下:
&subroutine( 参数列表 );

在新版本中,尽管也支持此调用方法,但不建议这样做.
接下来,让我们看一个简单的示例:
#!/usr/bin/perl # 函数定义 sub Hello{ print "Hello, World!\n"; } # 函数调用 Hello();
执行上述过程,输出结果为:
Hello, World!
Perl子程序可以像其他程序一样接受多个参数,并且子程序参数以特殊数组@_标记.
因此,子例程的第一个参数是$ _ [0],第二个参数是$ _ [1],依此类推.
参数是标量还是数组类型,当用户将参数传递给子例程时,perl默认都会通过引用调用它们.

#!/usr/bin/perl
# 定义求平均值函数
sub Average{
# 获取所有传入的参数
$n = scalar(@_);
$sum = 0;
foreach $item (@_){
$sum += $item;
}
$average = $sum / $n;
print '传入的参数为 : ',"@_\n"; # 打印整个数组
print "第一个参数值为 : $_[0]\n"; # 打印第一个参数
print "传入参数的平均值为 : $average\n"; # 打印平均值
}
# 调用函数
Average(10, 20, 30);
执行上述过程,输出结果为:
传入的参数为 : 10 20 30 第一个参数值为 : 10 传入参数的平均值为 : 20
用户可以通过更改@_数组中的值来更改相应实际参数的值.
由于@_变量是数组,因此可以将列表传递给子例程.
但是,如果我们需要传递标量和数组参数,则需要将列表放在最后一个参数上perl scalar 函数,如下所示:
#!/usr/bin/perl
# 定义函数
sub PrintList{
my @list = @_;
print "列表为 : @list\n";
}
$a = 10;
@b = (1, 2, 3, 4);
# 列表参数
PrintList($a, @b);
上面的程序合并了标量和数组,输出为:

列表为 : 10 1 2 3 4
我们可以将多个数组和哈希传递给子例程,但是当传入多个数组和哈希时,将导致失去独立的标识. 因此,我们需要使用引用(将在下一章中进行介绍)通过.
将哈希表传递给子例程时,它将被复制到@_,并将哈希表扩展为键/值组合的列表.
#!/usr/bin/perl
# 方法定义
sub PrintHash{
my (%hash) = @_;
foreach my $key ( keys %hash ){
my $value = $hash{$key};
print "$key : $value\n";
}
}
%hash = ('name' => 'youj', 'age' => 3);
# 传递哈希
PrintHash(%hash);
以上程序执行的输出为:
age : 3 name : youj
子例程可以使用return语句来返回函数值perl scalar 函数,就像其他编程语言一样.
如果不使用return语句,则子例程的最后一行将用作返回值.

#!/usr/bin/perl
# 方法定义
sub add_a_b{
# 不使用 return
$_[0]+$_[1];
# 使用 return
# return $_[0]+$_[1];
}
print add_a_b(1, 2)
以上程序执行的输出为:
3
在子例程中,我们可以返回标量,数组和哈希,但是当返回多个数组和哈希时,它将导致独立标识的丢失. 因此,我们需要使用引用(在下一章中进行介绍)来返回多个数组和函数.
默认情况下,Perl中的所有变量都是全局变量,这意味着可以在程序中的任何位置调用这些变量.
如果需要设置私有变量,可以使用my运算符进行设置.
The
我的运算符用于创建词法范围的变量. 用my创建的变量在声明的开头一直存在,直到关闭的范围结束.
闭合范围是指一对大括号中的区域,大括号可以是文件,也可以是foreach forval字符串.
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-171807-1.html
期待
暢暢等你周五的节目