Per语言入门第4版学习笔记-第四章子程序

第四章子程序
4.1 定义一个子程序
4.2 调用子程序
4.3 返回值
4.4 参数(Arguments)
4.5 子程序中的私有变量
4.6 参数列表的长度
4.6.1 更好的&max 程序
4.6.2 空参数列表
4.7my 变量的注释
4.8 使用strict Pragma
4.9 返回操作
4.9.1 省略符号&
4.10 非标量返回值[@more@]

第四章子程序

4.1 定义一个子程序
要定义自己的子程序,使用关键字sub,子程序的名字
sub marine {
$n + = 1; #全局变量$n
print “Hello, sailor number $n!n”;
}
事实上,到现在为止所出现的所有变量均是全局的

4.2 调用子程序
可以使用子程序的名字(带有&)来调用子程序
&marine;

4.3 返回值
下面的子程序:
sub sum_of_fred_and_barney{
print “Hey, you called the sum_of_fred_and_barney suroutine!n”;
$fred + $barney; #返回值
}
子程序中最后一个被计算的表达式为$fred + $barney,因此$fred 和$barney 的和将被返回。
如果最后一个被计算的表达式不是$fred + $barney;而是print 语句。其返回值通常为1。

4.4 参数(Arguments)
Perl 子程序可以带参数。将参数列表传给子程序中的方法是,在程序名后面接括号,括号内存放参数列表,如:
$n = &max(10,15); #此子程序有2 个参数
在Perl 中,会自动将此参数列表(此参数列表的另一个名字)自动存放在一个叫做@_的数组中。
这也就是说此子程序参数的第一个值存放在$_[0]中,第二个存放在$_[1],依次类推。

4.5 子程序中的私有变量
Perl 在每一次调用时提供@_这个私有变量,那它可以给我们提供私有变量。
sub max {
my($m,$n); #新的,私有变量
($m,$n) = @_; #赋值
if($m > $n) {$m} else{$n}
}
这些变量是此代码块中的私有的(或者局部的)变量;别的$m 和$n 不会影响此处的两个变量。而且,其它地方的代码不能访问或者修改这些变量

4.6 参数列表的长度
子程序可以容易的检测@_是否含有恰当的个数。
sub max{
if(@_!=2){
print “WARNING! &max should get exactly two arguments!n”;
}
#continue as before….
.
.
.
}
4.6.1 更好的&max 程序
$maximum = &max(3,5,10,4,6);
sub max {
my($max_so_far) = shift @_;
foreach (@_){
if($_>$max_so_far){
$max_so_far=$_;
}
}
$max_so_far;
}

4.6.2 空参数列表

4.7my 变量的注释
这些局部变量可以在任意块中使用,不仅仅是子程序中。例如,可以在if,while,foreach 等块中使用:
foreach (1..10){
my($square) = $_*$_; #本循环中的私有变量
print “$_ squared is $squrare.n”;
}

4.8 使用strict Pragma
你可能希望Perl 严格一些;那可以使用strict pragma。
告诉Perl 进行更严格的语法检测,需要在程序顶端use strict


4.9 返回操作
return 返回值,不再执行后续操作

4.9.1 省略符号&
有几条规则确定在调用子程序时是否可以省略掉&。
如果编译器在调用之前知道此子程序的定义,或者Perl 从语法中能知道这是一个子程序调用,则子程序前的符号&是可以省略的,像使用内嵌(built-in)函数一样。
总的来说就是,如果你写的子程序的名字和perl的默认函数 没有重名的,就可以省略&


4.10 非标量返回值
sub list_from_fred_to_barney {
if($fred < $barney) {
#Count upwards from $fred to $barney
$fred ..$banrey
} else {
#Count downwards from $fred to $barney
reverse $barney ..$fred;
}
$fred = 11;
$barney = 6;
@c = &list_from_fred_to_barney; #@c 为(11,10,9,8,7,6)

4.11
1.
#!/usr/bin/perl
sub total{
$tot = 0;
foreach $num (@_) {
$tot = $tot + $num;
}
$tot;
}

my @fred=qw{ 1 3 5 7 9 };
my $fred_total = &total(@fred);
print "The total of @fred is $fred_total.n";
print "Enter some numbers on separate lines:";
my $user_total = &total();
print "Tht total of those numbers is $user_total.n";

2.
#!/usr/bin/perl
sub total{
$tot = 0;
foreach $num (@_) {
$tot = $tot + $num;
}
$tot;
}

my @fred=( 1..1000 );
my $fred_total = &total(@fred);
print "The total of 1+...+1000 is $fred_total.n";

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/133835/viewspace-1026097/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/133835/viewspace-1026097/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值