查看原文
其他

Perl学习08之子程序

pythonic生物人 pythonic生物人 2022-09-11

"pythonic生物人"的第13篇分享



摘要

Perl中子程序定义、调用、参数传递及子程序中return函数使用。

目录



1、子程序定义

2、调用子程序

3、子程序传递参数(arguments)

4、子程序使用举例

5、子程序中return函数使用





正文开始啦



1、子程序定义

语法:

sub 子程序名{};

子程序命名遵守字母,数字,下划线,首行不能为下划线的规则;



2、调用子程序

调用子程序称为call子程序,使用与号 &子程序名调用,为了防止子程序名与Perl内置函数歧义尽量不要省略&号;

子程序执行过程中,最后一次计算结果会被当成子程序的的返回值;

例如,sub2.pl

#!/usr/bin/perluse strict;use warnings;
my $a=1;my $b=2;

my $result1=sum_a_b();my $result2=sum_a_b1();print "$result1\n\n";print "$result2\n";
sub sum_a_b{ print "Calling sum_a_b\n";#用于辅助调试,确认该子程序被调用到了 $a+$b;}
sub sum_a_b1{ print "Calling sum_a_b1\n"; $a+$b; print "Calling sum_a_b1\n";#此时该子程序返回结果为1,表示子程序成功输出信息}

perl sub2.pl

Useless use of addition (+) in void context at sub2.pl line 23.#sum_a_b1子程序结尾print导致

Calling sum_a_b

Calling sum_a_b1

Calling sum_a_b1

3


1



3、子程序传递参数(arguments)

传递参数存储在默认数组@_中,调用子程序时,调用@_中元素

例如,sub3.pl

#!/usr/bin/perluse strict;use warnings;
my $result=sum_a_b_arg(1,2);#传入参数1,2默认存储在默认数组@_中print "$result\n";
sub sum_a_b_arg{ print "Calling sum_a_b\n"; my ($a,$b)=@_;#调用默认数组@_中元素 $a+$b;}
perl sub3.pl
Calling sum_a_b
3


4、子程序使用举例

求数组中的最大值。
逻辑:传入一个数组,行首取出一个值赋给$max_sofar设为当前最大值,$max_sofar与余下数组中值比较,余下值比$max_sofar大,$max_sofar被余下值重新赋值,直到结束。
例如,max.pl

#!/usr/bin/perluse strict;use warnings;
my $max = &max_number(@ARGV);print "$max\n";
sub max_number{ print "calling max_number\n"; if (scalar @_ > 0){ my $max_sofar = shift @_; foreach (@_){ if ($_ > $max_sofar){ $max_sofar = $_; } } $max_sofar;#foreach最终结果 }else{ die "no argvments:$!"; }
}


perl max.pl 0 2 5

calling max_number

5


perl max.pl

calling max_number

no argvments: at max.pl line 21.



5、子程序中return函数使用

主要使用在子程序中,返回某个值并立即终止子程序。

例如,return.pl

#!/usr/bin/perluse strict;use warnings;
my @names = qw/ fred barney betty dino wilma pebbles bamm-bamm /;my $result = &which_element_is("dino", @names);print "$result\n";
sub which_element_is{ my ($what,@array) = @_; foreach my $i (0..$#array){ if ($what eq $array[$i]){ return $i; #返回$i并立即停止执行子程序 print "do this\n";#不会执行该句 } } return -1;}


perl return.pl

3



同系列文章

Perl学习01之标量数据

Perl学习02数组和哈希使用

Perl学习03之流程控制结构

Perl学习04之IO及文件读写

Perl学习05之正则表达式

Perl学习06之一行式操作

Perl学习07之自增(++)自减(--)


持续更新,欢迎您"关注"、"在看"、"分享"


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存