• 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私有变量每次调用结束,就会抛弃存值。

  • 相关阅读:
    使用“数据驱动测试”之前你应该知道的(终极篇)
    我读《2017软件测试行业调查报告》
    使用“数据驱动测试”之前你应该知道的(二)
    Why Helm?
    用 ConfigMap 管理配置
    环境变量方式使用 Secret
    volume 方式使用 Secret
    查看 Secret
    用 k8s 管理机密信息
    MySQL 如何使用 PV 和 PVC?- 每天5分钟玩转 Docker 容器技术(154)
  • 原文地址:https://www.cnblogs.com/lelin/p/11206190.html
Copyright © 2020-2023  润新知