Perl中的子例程


   Perl可以定义子例程, 也即是通俗讲的函数.
  子例程可以使程序代码的可重用性加强, 使代码简洁而易于维护.

  Perl中的子例程源自独立的命名空间, 所以即是存在一个与子例程相同名字的
  变量, 也不会产生二义性. 如:
  &subcall;
  $subcall;


子例程的定义 
  子例程的定义可以放在程序中的任意位置:
  即子例程的定义既可以放在程序的开头, 也可以放在程序的结尾.
  与C等许多编程语言不同, Perl的子例程通常不需要前置声明.

  定义子例程,采用如下形式:
  关键字sub + 子例程的名字(不含&符号) + 子例程程序代码块(用花括号包含).
  如:
    sub sayHello
    {
         print "Hello, everyone, nice to meet you/n";
    }

子例程的调用
   在任意表达式中, 只要使用子例程的名称(前面加上&符号),即是调用子例程.
   如, 调用上述定义的子例程sayHello,
   &sayHello;   #输出 
Hello, everyone, nice to meet you
  
子例程的参数
   在Perl中,子例程也可以带参数的形式调用:只要将要传递的参数列表放于
   子例程调用后面的括号内. 如
    sub max_
   {
        if($_[0] > $_[1])
        {
            $_[0];
        }else
        {
            $_[1];
        }
    }
    &max_(4,5);  #本子例程调用有两个传递参数:4 & 5
   Perl会自动地讲子例程的参数列表存储到名为@_的特定数组变量中供程序员使用,
   @_在子例程执行其间都是有效的。通过访问该数组, 可以确定参数的个数和这些参数
   所对应的值.
   注意:@_是每个子例程调用的私有变量,假如已经有了全局变量@_, 则该全局变量在
   子例程调用前会先保存起来, 并在子例程返回时恢复原本的值. 这也意味着子例程
   可以将参数传递给其它的子例程,而不用担心遗失自己的@_变量.
   如:
   #!C:/Perl/bin
   use strict;
   use warnings;

   sub print1_
   {
       my ($str1, $str2) = @_;
       print "$str1 $str2/n"; #输出 hello my name is shark
       &print2_("good","today is warm"); #
输出 good today is warm
       ($str1, $str2) = @_;
       print "$str1 $str2/n";
#输出 hello my name is shark
    }
    sub print2_
    {
        my ($str1, $str2) = @_;
       print "$str1/n$str2/n";
     }
    &print1_("hello","my name is shark");
   

子例程的返回值
    Perl会将子例程执行过程中的最后一次运算结果作为返回值.
注意:
   1:与其它一些编程语言不同,在Perl中,任何子例程都是有返回值的;
   然而, 并不是任何Perl子例程都会提供有用的返回值.
   2:最后一次运算是指"最后执行的表达式", 而不是子例程代码块中的
   最后一行.
   如:
   
#将会将两个输入参数的较大数作为返回值返回
   sub max_
   {
      if($_[0] >= $_[1])
      {
           $[0];
      }
      else
      {
           $[1];
      }
   }

 

   当然,也可以通过return操作符来返回某个值。

   return会马上返回值, 而不会执行子例程的其余部分,如下的子例程,

   当碰到第一个大于50的数时,即返回该数.

   sub bg_

   {

          foreach (@_)

          {

                 return $_ if($_  > 50);

          }

          -1; # 没找到, 则返回-1

   }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值