
1、定义子过程最普通的例子:
sub razzle{ print "OK,you have been razzled.\n";}razzle();
#:省略了输入参数和输出(返回值)。
#:perl向子过程传入数据和子过程传出数据的方法:所有传入的参数被当成单个平面标量列表,类似的多个返回值也被当做单个平面标量列表返回给调用者;当使用List也一样,任何传入的数组或散列的值都代换到一个平面的列表里面,同时也失去了他们的标识;
#:所有出入perl过程的参数都是以@_身份传入的。如果调用两个参数的函数,他们在函数内部可以作为@_数组的前两个成员访问:$_[0]和$_[1];
#:@_是一个本地数组,它的值是实际标量参数的别名(引用传参),因而如果修改了@_中的成员,那么同时也修改了对应的实际参数的值。
#:子过程的返回值是过程最后一个表达式的值。或者你可以在子过程的任何一个地方明确使用一个return语句来返回值并且推出子过程。
2、参数列表技巧
#:将 @_ 的值拷贝到一个 my 列表,这样就 可以方便使用这些正式参数( 不一样的是,这样拷贝就将引用传参的语义变为了传值传参) ,下面是一个典型的例子:
sub ayetenv { my ($key,$value) = @_; $ENV{$key} = $value unless $ENV{$key};}
#:不要传值参数的情况,求最大值:
sub max { $max = shift(@_); for my $item (@_) { $max = $item if $max < $item; } return $max;}$bestday = max($mon,$tue,$wed,$thu,$fri);
#:将@_填入一个散列
sub cofi{ my %options = @_; print "Maximun verbosity.\n" if $options{verbose} == 9;}cofi(password => 'love',verbose => 9,socre =>0);
#:通过形参修改原始值
upcase ($v1,$v2);sub upcase{ for (@_){ tr/a-z/A-Z/;}}($v3,$v4) = upcase($v1,$v2);
#:返回一个copy,不修改原始值
($v3,$v2);sub upcase { my @parms = @_; for (@parms) { tr/a-z/A-Z/ } return wantarray ? @parms : $parms[0];}
#:请其他的调用上面的函数
#!/usr/bin/perluse strict;use warnings;my @List1 = qw/Yan Zeng li/;my @List2 = qw/Wang Lu/;sub upcase { my @parms = @_; for (@parms) { tr/a-z/A-Z/; print"$_\t"; last; } print "\n"; return wantarray ? @parms : $parms[0];}my @newList = upcase(@List1,@List2);foreach (@newList){ print "$_\t";}print "\n"; 输出结果如下:
YANYAN Zeng li Wang Lu #:从例子可以看出,@_中存在的不是列表本事,而是把列表里面的元素一个一个的复制到数组中。
总结以上是内存溢出为你收集整理的perl -- 子过程 -->列表处理全部内容,希望文章能够帮你解决perl -- 子过程 -->列表处理所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)