PERL子程序的调用与return操作符

先不说别的,先上代码

use strict;

sub which_element_is()
{
my ($what,@array)=@_;
foreach(0..$#array)
{
if($what eq  $array[$_])
{
return $_;
}
}
-1;
}

my @names=qw(fred betty dino wilma pebbles);

my $results=&which_element_is("dino",@names);

print "the index is ".$results;

PS:

     要注意的是在调用子函数之前要进行函数定义,或许在调用之前不用定义也行,但是还不知道要怎么做,就此掠过,还有在调试程序的时候还是那个问题,在if语句块中添加

大括号,进行标明!!!,总是在这里通不过...还有之前我们说过在PERL的子程序中是不用return语句的,最后执行的语句就是返回值,当然如果不是要在代码快中的最后一句进

行返回的话就要使用return语句了

省略"与号"

在程序中如果在子程序调用之前,就已经有了定义,此时便可以省略与号,或者在语法上能够识别出是子程序调用的时候,也可以省略与号(也就是说在函数名称的后面加上小

括号即可)另外一种情况是在子程序与内置函数同名时必须使用与号!!,否则就会调用内置函数,而不是程序员自己定义的函数了

非标量的返回值

其实我们知道函数的返回值不一定只有单个变量,也就是说可以有非标量的返回值如下:

use strict;

my $fred=2;

my $barney=9;

sub list_from_fred_to_barney

{   

 if($fred<$barney)  

  {

         $fred..$barney;  

  }

    else

    {   

     $barney..$fred; 

   }  

    }

print  list_from_fred_to_barney;

关于my 和 state

回顾下我们使用my 来创建子程序中的私有变量,但是每次子程序调用一次,该变量就会重新定义一次,state操作符声明的变量则可以再子程序的多次调用时保留上次的结果,

use 5.010;
running_sum(5,6);#使用了小括号,告诉PERL我这是在调用函数
running_sum(1..3);#使用了小括号,告诉PERL我这是在调用函数
running_sum(4);#使用了小括号,告诉PERL我这是在调用函数
sub running_sum
{
state $sum=0;
state @numbers;
foreach my $number(@_)
{
push @numbers,$number;
$sum+=$number;
}
say "the sum of(@numbers) is $sum";
}

但是state还有些许限制,我们不能在列表上下文中初始化这两种类型的state变量

即:

state @array=qw(a b c);#是错误的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值