使一个子程序包含一段独立的代码,这样的方法,就可以使得perl语言中的子函数能够帮助把代码分解划分成一个个的逻辑单元。子功能块同样也可被用于创建一些大段的没有名称的代码,这样在返回的时候就可以用它们来进行传递。
子功能块支持下面的基本语句:
sub Name Prototype Attributes Block
所有这四个参数都是有可选择性的,但是Name和Block这两个参数中至少有一个要被具体化。因为参数Prototype和Attributes都很少用到,在这里我们就不讨论这两个参数了。
普通的定义和调用子程序的语句和大多数的编程语言差不多,如:
# declare and define subroutine 'foo'
subfoo
{
print "foo";
}
# now call foo
foo();
声明一个没有定义的子程序,可以省略其代码段。定义一个匿名的子程序,就是定义一个没有名称,只包含代码的子程序,如:
# declare subroutine bar without defining it
sub bar;
# create an anonymous subroutine
$coderef = sub { print 'anonymous'; }
&$coderef;
# call the subroutine
子程序的参数通常是用特殊的数组@_来传递的。这意味着一个子程序可以改变那些传递给它的变量值,如$_[0], $_[1]等等。
为了完成一个调用函数的值传递,只需要将数组@_复制到一些特定的变量中去。下面是典型的perl语言代码:
subfoo
{
my ($key, $value) = @_;
print "$key = $value ";
}
声明子程序可以避免函数受到其它程序的影响,同样也可以提高函数的复用性。