Subroutine 子程序 Perl 第四章

子程序的定义是全局的,不需要事先声明。若重复定义子程序,后面的覆盖前面的。

 

sub marine {

$n +=1;

print " Hello ,sailor number $_ ! ";

}

 

调用:&marine;

返回值:最后一次的运算结果会被当作返回值。

变量:所有变量默认为全局变量

参数:@_为subroutine 的私有变量。若恰有全局变量@_ 则调用子程序时存起,子程序结束会自动恢复。

         $_[0]  $_[1] $_[2]  ...存于数组变量@_

           sub max {

              if (@_ != 2)  { print  "  “};

                if ($_[0] > $_[1]) {

                    print "  ";

                   }

                }

      &max(13,29) ;

 

example2:

      $maxmun = &maxh(2,8,32,44,9);

     sub maxh { 

        my ($max_so_far) = shift @_ ;

       foreach (@_)  {

         if ($_ > $max_so_far)  { $max_so_far = $_ };

        }

      $max_so_far;

  }

 

私有变量: my

 sub max {

  my ($m,$n) = @_ ;  #子程序私有变量;和子程序外的世界互不相犯

  }

 

 

 

作用域受限于定义它的最内层语句块/文件 #语句块为foreach等。

my 操作不会改变赋值时的上下文

 

my  ($num)  = @_  ;  # 列表上下文  等同于  ($num) = @_

my  $num = @_ ; #标量上下文  等同于  $num = @_

my $fred,$baney  # 错,没有声明$baney

 

return:立即停止执行,并返回某值。

        sub which {

         foreach (  )  {         

         if  ( )  {

                     return  $_;

              }

         }

       return -1 ;  #或省略return   指查无此值,没有找到符合条件的元素

    }

 

省略&号:

和内嵌函数同名时,不能省略&。  比如自定义一个函数chomp() ,调用时必须使用&chomp

 

非标量返回值:

sub  listx  {

if ($a < $b) {

  $a..$b

} else {

reverse $a..$b

}

@c = &listx(11,6)  ;#  11,10,9,8,7,6

 

持久性私有变量:state  多次调用子程序期间,保留该变量每次的值。适用于未定义的全局变量这种情况,my私有变量每次调用结束,就会抛弃存值。

 

转载于:https://www.cnblogs.com/lelin/p/11206190.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值