首页 > 编程语言 >PERL子程序的调用与return操作符

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

时间:2023-04-03 17:38:27浏览次数:42  
标签:调用 return sum PERL state my 子程序


先不说别的,先上代码

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);#是错误的

标签:调用,return,sum,PERL,state,my,子程序
From: https://blog.51cto.com/u_15995156/6166906

相关文章

  • PERL语言的子程序
    子程序的定义可以使用关键字sub子程序名(不包含&),以及经过缩进的花括号$n=1;&marine;&marine;&marine;submarine{print"Hello$n\n";$n+=1;}子程序可以在程序的任意位置,如果提前使用在后定义的话,也不用事先声明,只是子函数只能是定义,经过调......
  • perl语言
    读取文件  文件操作时候,"<"表示读取,">"表示写入,“>>”表示追加  如果读取成功,就返回一个不为0的数字,作为判断依据。正则匹配逐行读取文件,并进行正则匹配。  使用while(<文件句柄>)对文件进行逐行读取  每一行的值会自动保存在一个$_的特殊变量中  获取该行......
  • QR码制作公司Paperlinks推订餐应用PayDragon
    Paperlinks不但能利用QR码让你与菜单互动起来,还能为你提供简单的手机订餐服务,公司最近发布了iPhone及Android订餐应用PayDragon,两步方可完成手机订餐。在如果你正忙着写博......
  • Perl快速删除文件和目录
    删除文件和空目录脚本 1#!/usr/bin/perl23useFile::Find;45my$dir='/path/to/directory';6find(sub{unlink$_if-f$_},$dir);7find(sub{rmdi......
  • Vue中获取method方法return返回值--常用于请求成功后回调
    mounted:(){this.getList('',(data)=>{console.log(data);})}methods:{getList(condition){get_list({...condition}).then(res=>{......
  • firefly qt运行错误 Cannot find EGLConfig, returning null config
    报如下错误arm_release_verofthislibmaliis'g6p0-01eac0',rk_so_veris'7'.CannotfindEGLConfig,returningnullconfigUnabletofindanX11visualwhich......
  • JS中的 map, forEach 无法跳出循环, return和 break不起作用,可以使用every 和 some方法
    JS中的map,forEach无法跳出循环,return和break不起作用,可以使用every和some方法敲代码的TKP于2022-09-0115:52:47发布1711收藏1分类专栏:javaScriptes6文......
  • Linux 中间件 | Nginx 支持 perl-cgi
    本文环境,AmazonLinuxrelease2,全程用root用户。前提是已经装好了Nginx,并且有--with-http_perl_module模块。没有则参考添加一、首先确认并安装perl-FCGIrpm-q......
  • Linux 中间件 | Perl 及 Perl 模块安装
    Perl作为脚本语言,应用范围也比较广泛。本文环境,AmazonLinuxrelease2,全程用root用户。Perl安装一、通常系统会自带,先确认一下rpm-qa|grepperl二、没有自带,......
  • [MyBatis]mapperLocations属性通配符的使用
    示例:<beanid="sqlSessionFactory"class="org.mybatis.spring.SqlSessionFactoryBean"><propertyname="dataSource"ref="dataSource"/><propertyname="......