1、在Perl中,子程序名与变量名属于不同的命名空间,可以使用同一个名字分别命名子程序和变量,但不建议这样使用。
2、子程序的定义是全局的,同名的子程序后边的会覆盖掉前边的定义。
3、定义子程序
sub subProgram{
#body
}
4、调用子程序
&subProgram
5、所有的子程序都有返回值,默认最后一行的运算结果为返回值。
6、子程序未定义参数时,传递的参数默认传给"@_",可以通过$_[0]、$_[1].....访问;
访问传递的参数:
1、($m,$n) = @_
2、$_[0]、$_[1]……
7、在子程序中创建私有变量
my($m,$n);
my不会改变赋值时的上下文;
my变量只在其所在的最内层语句块(如for、foreach等)使用,超出则无效;
如果不在任何语句块中,则对整个程序文件有效,作为整个程序文件的私有变量使用;
my 后边加括号,括号内的变量都被声明,不加括号只对紧跟其后的那个变量有用,my($m,$n)、my $m,$n;
8、use strict:使用更严格的语法规则,对当前语句块和剩下的部分有用;
9、如果Perl在语法上可以识别出是子程序调用,则可以省略“&”,但是子程序名与Perl内置函数同名的时候,“&”不可省略;
10、持久性私有变量
例:
sub run{
state $n = 0;#初始化一次,再次执行会被忽略
$n +=1;
}
无法用于数组和哈希类型的变量;