perl -- 子过程 -->列表处理
?
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);
($v3,$v2);
sub upcase {
my @parms = @_;
for (@parms) { tr/a-z/A-Z/ }
return wantarray ? @parms : $parms[0];
}
#!/usr/bin/perl
use 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";
输出结果如下: YAN
YAN Zeng Li Wang Lu
#:从例子可以看出,@_中存在的不是列表本事,而是把列表里面的元素一个一个的复制到数组中。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |