Perl的子程序(二)

在Perl中可以自己创建子程序(Subroutine):

关键字sub,子程序名以及用花括号封闭起来的代码块。

                sub  marine { ... }

子程序名与标量的命名空间是不同的两个部分。

子程序的返回值:最后一次运算的表达式即是默认的返回值。也可以用return来显式的返回,这样之后的语句不会执行。

                       在标量上下文返回的会是标量,在列表上下文返回的也是列表。

子程序中的参数:子程序内部可以使用@_,$_[0],$_[1],$_[2],,,这样的变量来表示。@_变量是子程序私有变量,递归调用时,不会出错。

                       在子程序调用时,在子程序名后用括号括住的列表表达式。

                       $n = &max(10,15);          #10后被送到$_[0],15被送到$_[1],@_=(10,15),在标量上下文值为2;

子程序私有变量定义: my关键字来声明词法变量(lexical variable)。           my($m,$n) = @_;  #创建私有变量并赋值。

                              不仅可以定义在子程序中,还可以定义在if, while, foreach中。

                               只能用来声明单个标量/变量,列表/数组。          my $fred, $barney;    #错误,第二个变量无法声明。

持久性私有变量: 用关键字state来声明,在子程序的多次调用中保留变量之前的值。作用域仍然是只存在于子程序内部。

                        sub  marine  {state $n=0; $n+=1; print; }

                        也可以用来声明数组和哈希类型。   state @number。

子程序的调用:子程序可以通过 (&+子程序名)的方式来调用。

                    如果编译器之前看到过子程序的定义,那么可以不加&,而直接调用子程序。

                    如果Perl可以通过语法规则直接判断它只能是子程序调用,那么也可以省略 &。

                            也就是说只要你将参数列表放进括号内,就一定是子程序调用。

use strict;        #强制要求使用一些严格的,良好的编程风格。

原文地址:https://www.cnblogs.com/-9-8/p/4485835.html