格式:
**subroutine declaration:**
sub subroutine_name;
**subroutine definition:**
sub subroutine_name{block}
**subroutine call:**
do suroutine_name;
&subroutine_name;
subroutine_name();
subroutine_name;
**subroutine call with parameters:**
&subroutine_name(parameter1, parameter2, ...)
subroutine_name(parameter1, parameter2, ...)
声明: sub 子例程名;
定义: sub 子例程名{语句; 语句;}
local函数:
local函数能从参数列表中创建局部变量。如果局部变量和全局变量重名的话,程序将临时创建一个新的局部变量来暂存全局变量的值。当局部变量超出其作用域时,全局变量将再一次可见,并恢复其原有值。
my运算符:
my 运算符用在词法上打开按值调用模式。my声明得到的变量在从声明之处开始到最内层包含的块中都是可见的。使用my运算符声明的变量将创建在特殊缓冲区中,该缓冲区将专用于创建它的代码块。
local 与 my 的区别:
my 函数声明得到的所有变量都值在声明它的子例程中可见,对该子例程调用的任何其他子例程都是不可见的。而local函数在该子例程调用的其他子例程是可见的。
#!/usr/bin/perl
$friend = "Louise";
$pal = "Danny";
print "$friend and $pal are global.\n";
sub guests{
my $friend = "Pat";
local $pal = "Chris";
print "$friend and $pal are weclome guests.\n";
&who_is_it;
}
sub who_is_it{
print "You still have your global friend, $friend, here.\n";
print "But your pal is now $pal.\n";
}
&guests;
print "Global friends are back: $friend and $pal.\n";
output:
Louise and Danny are global.
Pat and Chris are weclome guests.
You still have your global friend, Louise, here.
But your pal is now Chris.
Global friends are back: Louise and Danny.
原型(Prototype):
原型(Prototype)负责在调用子例程时告诉编译器应当读取多少个参数,以及相应参数类型。作为声明的一部分,原型将在程序编译阶段进行处理。如要调用使用原型声明的子例程,则必须省略&符号,否则程序会将该子例程当做用户自定义的子例程来处理,而不是内建子例程处理,同时编译器将忽略子例程原型
wantarray函数:
内建的wantarray函数可判断子例程的返回值类型是列表还是标量。