1.system function && user function
system fucntion:chomp reverse print...
user function: &+indetifier
2.define a subroutine
sub subroutine_name {
body;
}
eg:sub marine{
$n +=1;
print "Hello,sailor number $n! ";
}
3.call subroutine
& subroutine_name();
eg:&marine;
4.return value
子例程总是作为表达式的一部分被调用,即使并不需要表达式的结果.
每一个子例程在运行过程中,计算值是它一些列动作的一部分.在子例程中得到的最后一个计算值自动成为返回值.
eg:
sub sum_of_fred_and_barney{
print "Hey,you called the sum of fred and barney subroutine! ";
$fred + $barney; #这不是真正的返回值
print "Hey,I'm returning a value now! ";#糟了!!!
}
NOTE: 向子例程增加代码时要确保最后一个表达式的结果是你希望的返回值.
5.arguments
参数列表在子例程运行期间被自动地付给一个特别的数组变量@_.子例程可以访问这个变量以确定参数个数和参数的值.
所以:第一个参数$_[0]
第二个参数$_[1]
NOTE: $_ 与$_[0] $_[1] 完全是两回事,不要混淆了。
如果超出了@_数组范围,你将得到undef,@_变量是子例程的局部变量,总是当前子例程调用的参数列表。
6.subroutine 's private variable
default: perl中所有变量都使全局变量
但可以用my 声明私有变量
eg: sub max {
my($a,$b);
($a,$b) = @_;
if($a>$b) {$a} else {$b} ##不要分号
}
7.可变长参数列表
eg: $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;
}
参数列表也有可能是空的 eg: $maximum = &max(@numbers); @numbers 有可能为空列表
8.my ---词法变量说明
词法变量的作用域限制在最小的封闭块或文件中。
任何新标量都以空开始------对标量是undef ,对数组是空列表。
9.use strict
use warning
尽量使用
10.return
return 之后的语句不在执行。
11.&
&开头,一定是子例程调用。但函数调用不一定有& ()。
perl的哲学是 没有必要的就不要。