子程序

作者: 食梦狸猫 | 来源:发表于2019-03-22 16:51 被阅读0次

Perl可以让我们创建子程序,也就是我们自己定义的函数。子程序用&开头。

定义子程序

用关键字sub定义,可以定义在任意位置,不用事先声明。
如果有重名子程序,那么后定义的会覆盖之前定义的。
调用子程序时,只需要用 $子程序名 进行调用。

返回值

子程序的最后一次运算结果就被自动当作子程序的返回值。若子程序最后一步执行的不是计算操作,那么会根据情况返回1或0。

参数

要传递参数到Perl子程序里,只要在调用后面加上被括号圈引的列表就行了,Perl会自动把参数列表化名为数组变量@_ 。 如果用到超出@_数组边界的参数,只会得到undef

$n = &max(10,15);

sub max
{
  if($_[0] > $_[1]){
          $_[0];
  }else {
          $_[1];
  }
}

子程序中的私有变量。

默认情况下,Perl内所有变量都是全局变量,在程序的任何地方的都可以访问它们。但我们借助my操作符来创建私有变量,称为词法变量。

sub max
{
  my($m,$n);
  ($m,$n) = @_;
  if($m > $n) { $m } else { $n }
}

Perl也支持变长参数列表和空参数列表

use strict编译指令

将use strict指令放在程序开头,将会让Perl多一些约束

return操作符

和其他语言一样

非标量返回值

子程序还可以返回列表值
例子:

sub list_from_fred_to_barney{
  if($fred < $barney){
      $fred..$barney;
  } else {
          reverse $barney..$fred;
    }
}

持久性私有变量

在子程序中用my操作符创建的私有变量,在每次调用这个子程序的时候都会被重新定义。而使用state操作符来声明变量,就可以在多次调用期间保留变量之前的值,并且变量的作用域局限在子程序内部。

例子:

use 5.010

sub marine{
  state $n = 0;
  $n += 1;
  print "hello"#这是执行的最后一步,返回1
}

相关文章

网友评论

      本文标题:子程序

      本文链接:https://www.haomeiwen.com/subject/dhdrvqtx.html