Perl 子程序也就是用户定义的函数。
Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。Perl 子程序可以出现在程序的任何地方,语法格式如下:
sub subroutine{
statements;
}
调用子程序语法格式:subroutine( 参数列表 )
在 Perl 5.0 以下版本调用子程序方法如下:&subroutine( 参数列表 )
向子程序传递参数
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);
向子程序传递哈希
在传入多个数组和哈希时,会导致丢失独立的标识,所以需要使用引用。
当向子程序传递哈希表时,它将复制到 @_ 中,哈希表将被展开为键/值组合的列表。
实例:
#!/usr/bin/perl
# 方法定义
sub PrintHash{
my (%hash) = @_;
foreach my $key ( keys %hash ){
my $value = $hash{$key};
print "$key : $value\n";
}
}
%hash = ('name' => 'runoob', 'age' => 3);
# 传递哈希
PrintHash(%hash);
#结果
age : 3
name : runoob
引用
引用就是指针,Perl 引用是一个标量类型可以指向变量、数组、哈希表(也叫关联数组)甚至子程序,可以应用在程序的任何地方。
定义变量的时候,在变量名前面加个\,就得到了这个变量的一个引用,比如:
$scalarref = $foo; # 标量变量引用
$arrayref = @ARGV; # 列表的引用
$hashref = %ENV; # 哈希的引用
$coderef = &handler; # 子过程引用
$globref = *foo; # GLOB句柄引用
取消引用可以根据不同的类型使用 $, @ 或 % 来取消,