Perl学习--子程序

Perl基础学习08之perl子程序subroutines,return函数 Perl中子程序定义、调用、参数传递及子程序中return函数使用。 阅读详情

##格式

定义子程序的格式为

sub 子程序名{
	
	表达式;
}

注意:

  • 子程序的定义是全局的
  • 如果定义的两个子程序是重名的,后面的子程序会覆盖先前的

##调用子程序

可以在表达式中使用子程序名来调用

$marine;	#打印 Hello!

sub marine{
	
	print "Hello!\n";
}

在子程序的调用时,会看到有 marine 和 &marine 两种方式,区别在于:

  • marine 调用,子程序要出现在被调用出之前,这点类似于C语言,调用子函数时,子函数需要在调用处之前先声明

  • &marine调用,与之相反

##返回值和return

在Perl中,一般默认返回最后一次运算的结果,例如:

  1 use 5.010;
  2 
  3 my $a = 1;
  4 my $b = 2;
  5 my $c = 3;
  6 
  7 sub sum{
  8     $a + $b;
  9     $a + $c;	#返回值
 10 }
 11 
 12 my $sum_all = sum;
 13 
 14 print "The sum is $sum_all \n";

##格式

定义子程序的格式为

sub 子程序名{
	
	表达式;
}

注意:

  • 子程序的定义是全局的
  • 如果定义的两个子程序是重名的,后面的子程序会覆盖先前的

##调用子程序

可以在表达式中使用子程序名来调用

$marine;	#打印 Hello!

sub marine{
	
	print "Hello!\n";
}

在子程序的调用时,会看到有 marine 和 &marine 两种方式,区别在于:

  • marine 调用,子程序要出现在被调用出之前,这点类似于C语言,调用子函数时,子函数需要在调用处之前先声明

  • &marine调用,与之相反

##返回值和return

在Perl中,一般默认返回最后一次运算的结果,例如:

  1 use 5.010;
  2 
  3 my $a = 1;
  4 my $b = 2;
  5 my $c = 3;
  6 
  7 sub sum{
  8     $a + $b;
  9     $a + $c;	#返回值
 10 }
 11 
 12 my $sum_all = sum;
 13 
 14 print "The sum is $sum_all \n";

如果我们想在子程序执行一半时就返回,可以用 return

  1 use 5.010;
  2 
  3 my $a = 1;
  4 my $b = 2;
  5 my $c = 3;
  6 
  7 sub sum{
  8     if($b > $a){
  9        return  $a + $b;
 10 
 11     }
 12     else{
 13         $a + $c;
 14     }
 15 }
 16 
 17 my $sum_all = sum;
 18 
 19 print "The sum is $sum_all \n";

执行结果为:

##参数

给定一个取两数最大值的子程序:

1 sub larger{
2 	if($a > $b){
3 		$a;
4 	}
5 	else{
6 		$b;
7 	}
8 }

如果想比较任意的两个数,可以这样调用子程序

1 use 5.010;
2 
3 my $max = &larger(10, 15);
4 my $max = &larger(4, 1);

在Perl中,有一个特殊的数组变量@,Perl会自动将参数列表化名为@_

变量@_在子程序执行期间有效,并且这个变量是子程序私有的

如果已经有了全局变量@_,则在子程序调用前会先被存起来,并在子程序返回时恢复原来的值

由于这个特殊的变量,子程序的第一个参数会存储于$_[0],第二个参数存储于$_[1],以此类推

那么上边的子程序可以改写为:

1 sub larger{
2 	if ($_[0] > $_[1]){
3		$_[0];
4	}
5	else{
6		$_[1];
7	}
8 }

可以看出,这个子程序只接受两个参数,当出现更多的参数时,就会被忽略

可能有人会想,在子程序中多加几个 if...else 语句就行了,但如果要比较的参数有数十上百个,甚至要比较的参数的个数都是未知的呢

因此需要利用其他方法

  1 sub larger{
  2     my $max_sofar = shift;
  3     foreach (@_){ 
  4         if($max_sofar < $_){
  5             $max_sofar = $_;
  6         }    
  7     }   
  8 
  9     $max_sofar;
 10 }

my $max_sofar = shift; 将数组的第一个值传递给 &max_sofar, 同时认为第一个参数是当前的最大值

随后利用循环语句 foreach 遍历数组中的每个元素,依次做比较,如果有数值大于 $max_sofar 则将该数传递给 $max_sofar, 直到遍历完所有的元素

32位快速加法器设计 阅读详情

相关推荐

光伏电站发电功率预测实战:从基础物理模型到LSTM时间序列分析

本文系统介绍了光伏电站发电功率预测的实战方法,从基础的物理晴空模型到先进的LSTM时间序列分析。通过结合电工杯等竞赛中常用的代码与模型,详细阐述了如何利用历史数据和数值天气预报构建高精度预测体系,并针对阴雨天气等预测瓶颈提出了分场景建模与模型融合等优化策略,为电站运维和电网调度提供可靠的数据支持。

pp12345的博客 216

Perl 子程序(函数)

statements;

weixin_43664101的博客 1245

UE5新手必看:如何用蓝图系统快速打造赛车游戏(含Chaos Physics配置)

本文为UE5新手提供使用蓝图系统快速打造赛车游戏的完整指南,涵盖Chaos Physics配置、载具蓝图架构设计、控制逻辑实现等关键步骤。通过详细的实战案例和优化技巧,帮助开发者高效构建具备专业物理反馈的赛车游戏原型。

weixin_29001327的博客 387

Perl子程序

Perl子程序 1. 子程序的基本属性 1.1 子程序的定义 要定义子程序,首先要以关键字 sub 开头,再加上子程序名,花括号,花括号中包含的是函数的主体。 子程序可以被定义在程序的任意位置;不需要对子程序进行事先声明; 子程序是全局的,如果定义了两个重名的子程序,后面的子程序会覆盖前面的那个; #a simple subroutine sub marine{ $n += 1; prin...

追梦赤子心 969

新手避坑指南:用镭神C32和KVH 1750 IMU做标定,为什么直接上lidar_align会失败?

本文详细解析了使用镭神C32激光雷达和KVH 1750 IMU进行标定时常见的失败原因及解决方案。从IMU的微分传感器特性到Lidar-IMU标定的数学本质,再到可行的标定方案和实操注意事项,帮助新手避开认知陷阱,掌握正确的标定方法。

weixin_30162121的博客 327

别再乱短接了!OEC/OEC-turbo刷机救砖,用RKDevTool避开‘下载boot失败’的保姆级教程

本文提供OEC/OEC-turbo刷机救砖的终极指南,重点介绍使用RKDevTool避开‘下载boot失败’的详细步骤。从Loader模式的优势到硬件准备细节,再到分阶段刷机方案,帮助用户高效完成设备恢复,避免反复短接和常见误区。

weixin_29280657的博客 1108

Perl 语言笔记(3) -- 子函数

子函数 子函数的定义 sub 子函数明{ #statement }, 子函数名如果重名,则后定义的覆盖前定义的,如果与系统函数名字则必须在子函数明前加&来显示的调用。 子函数的调用 一般在子函数名前加&调用,如果调用时,子函数已经在前面定义过则&可以省略。调用的时候函数参数没有限制。 子函数的参数 子函数通过数组@_来传递参数,参数也可以通过$_[0],$_[1]方式进行单个的引用

阿罗的技术博客 2100

Qwen2.5-7B大模型实战:从零部署到高效推理全流程解析

本文详细解析了Qwen2.5-7B大模型从零部署到高效推理的全流程。内容涵盖环境准备、模型下载、使用Transformers进行核心对话推理,并深入介绍了vLLM与TGI生产级服务部署、GPTQ/AWQ量化技术以降低显存消耗,以及llama.cpp、Ollama等本地推理方案。旨在帮助开发者快速掌握部署技巧,实现大模型在消费级硬件上的高效运行。

weixin_29061425的博客 490

Perl 子程序(函数)

Perl 子程序(subroutine)也就是用户定义的函数。Perl 子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。Perl 子程序是一段封装了一系列操作或计算的代码块,它可以被反复调用,以便在程序中重复使用。Perl 子程序有助于模块化程序,使得代码更易于理解、维护和重用。Perl 子程序可以出现在程序的任何地方,语法格式如下:statements;调用子程序语法格式:subroutine( 参数列表 );

lingjierui的博客 747

无人驾驶小车调试笔记(六)-- 车轮校准

简介:小车的动力完全来自于两个电机带动的车轮,在理想状态下,给两个电机同样的驱动参数,两个车轮会以同样的转速带动小车直线行驶,而实际情况是每个电机可能都会有个体差异,也就是说给予同样的驱动参数,表现出的转动速度会有些许不同,两个轮子的差速会导致车辆拐弯,后果就是给了直线行驶的控制命令,但是车走着走着就偏离了原本的方向,所以在开始控制之前,我们需要先平衡两个车轮的转速,保证在同样驱动参数下,两个车轮转速大致相同,也就是可以走直线。 车轮校准分为3步,测试、调整后再测试、保存参...

aibingjin的博客 1822

从零开始学 AUTOSAR:深入浅出 SAE J1939 诊断通信管理器(J1939Dcm)深度完整版

SAE J1939 是美国汽车工程师学会制定的重型车辆 CAN 总线通信标准,覆盖卡车、客车、工程机械、农机、船舶等,是商用车领域的 “通用语言”。基于CAN 2.0B 扩展帧(29 位 ID)(车规主流)PGN(参数组号)+ SPN(可疑参数号)核心标准:J1939-21:数据链路层(CAN 帧格式、地址声明)J1939-71:应用层(普通信号、报文)诊断层(核心!J1939Dcm 依据)J1939-81:网络管理(地址管理、节点检测)

getusushu的博客 118

perl接受传递参数的几种方法

1.使用一个参数读取shell传递来的多个参数: 目录下: a.log b.log c.log dota.pl dota.pl的内容如下: #! /usr/bin/perl use Getopt::Std; use warnings; use strict; sub read_from_sh($) { my $file = shift; m...

iteye_4596的博客 2728

GMSL转eDP芯片MAX9686X(ADI)

MAX96860/MAX96862/MAX96864解串器可以把单路或双路GMSL转换成eDP V1.4a,支持820MHzPCLK的无压缩的24bpp(每个像素的位数)视频,或660MHz的30bpp视频。芯片的GMSL支持NRZ编码的6Gbps/187Mbps的GMSL2,PAM4编码的12Gbps/187Mbps的GMSL3。同时支持单线(COAX模式)双向全双工传输控制数据和video数据。支持DSC压缩的芯片,最大支持像素时钟1080MHz@24bpp或者864MHz@30bpp,传输方式包括同轴

qflook的博客 2851

Perl 小骆驼学习笔记 - 4. 子程序

Perl子程序使用要点:1.定义用sub关键字,默认使用全局变量;2.调用可用&name或直接name;3.返回值默认为最后表达式结果,可用return提前返回;4.参数通过@_数组传递,可用my创建私有变量;5.my声明词法变量,state声明持久变量;6.建议使用use strict加强语法检查;7.可返回标量或列表值;8.注意变量作用域避免冲突。子程序使代码模块化,需合理管理变量作用域。

qq_24434431的博客 253

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Perl学习之四:子程序

一、子程序含义及命名规则perl中的子程序即是用户自己定义的函数子程序的名称也是perl的标识符,即由字母、数字、下划线组成,但不能由数字开头二、定义子程序子程序由关键字sub、子程序名及花括号内的代码块组成子程序的定义是全局的不需对子程序事先声明可在任意位置定义若存在重名子程序,后面的子程序将覆盖前面的    例:    sub printNum {        $n += 1;        print "number $n/n"    }三、调用子程序可在任意表达式中使用“&子程序名”来调用子程序 

cleanerjie的专栏 771

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

perl学习日记4 子程序

<br />1.    子程序<br />函数的命名空间和列表,标量一样,都是独立的,不用担心重名1.1      定义一个子程序<br />sub marine {<br />$n + = 1; #全局变量$n<br />print “Hello, sailor number $n!/n”;<br />}<br /> <br />都是全局变量,私有变量前加my就行了1.2      调用子函数<br />&marine; #输出Hello, sailor number 1!<br />&marine; #

legend 496

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

perl学习之子程序

一、定义子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读。PERL中,子程序可以出现在程序的任何地方。定义方法为:sub subroutine{statements;}二、调用调用方法如下:1、用&调用&subname;...sub subname{...}2、先定义后调用 ,可以省略&符号sub subname{...}...subname;3、...

weixin_30546933的博客 93

perl子程序学习笔记

 一.定义        子程序即执行一个特殊任务的一段分离的代码,它可以使减少重复代码且使程序易读.        PERL中,子程序可以出现在程序的任何地方.        定义方法为:        sub subroutine        {                statements;        }二.调用        调用方法如下:        1.用&调用     

aldenphy的专栏 5597

perl学习(4) 子程序

子程序,类比c语言中的函数,在形式上个人认为最大的区别:没有形参 1.1.定义子程序 1.2.调用   #! /usr/bin/perl   sub marine {     $n += 1 ;     print "$n\n" ; } &amp;marine; &amp;marine;       1.3.返回值 1.3....

weixin_34380948的博客 101

Perl入门学习(八)子程序

perl 子程序入门学习

m0_61544122的博客 859

Perl入门学习笔记——子程序

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33743248的博客 301

perl学习笔记(三)子程序

文章目录前言3 子程序3.1 子程序的定义和调用3.2 子程序的参数和返回值3.3 子程序中的私有变量3.4 变量的严格声明3.5 数组的最后一个下标$#3.6 静态变量state总结 前言 本文主要记录perl学习过程中的子程序。 3 子程序 3.1 子程序的定义和调用 $n = 0; sub add{ #子程序的定义 $n += 1; print "n = $n\n"; } &add; #调用 注意是&符号 3.2 子程序的参数和返回值 最后一个计算结果作为函数的返

hh199203的博客 434

Perl学习笔记-子程序

某个函数可以是子程序,也可以是Perl自带的函数。 Subroutines意思就是自定义的而非系统自带的函数。 使用sub来定义子程序,例如 sub sayHello { print "Hello, World"}。 子程序的定义是全局的。没有私有子程序。如果两个子程序的名字一样,后面的子程序将会覆盖前面定义的子程序。 子程序使用&amp;符号来调用。例如&amp;sayHello; ...

iteye_16152的博客 181

Perl 学习笔记-子程序

1.定义子程序    使用sub关键字定义 ; 子程序名和标识符同要求, 但是有的特殊的可以用 &符号; 子程序是全局的, 不需要再使用前声明; 重名函数后者覆盖前者. sub roger{ $n += 1; #全局变量$n print "Hello , sailor number $n!\n"; } &roger # 前面加&来调...

weixin_30596735的博客 174

perl学习4--调用子程序

#!/usr/bin/perl -wsub sum_of_fred_and_barney {  print "Hey,you called the sum_of_fred_and_barney subroutine!\n";  $fred+$barney;}$fred=3;$barney=4;$wilma=&amp;sum_of_fred_and_barney;print "\$wilma is ...

weixin_34293059的博客 91
上一篇: Perl学习----my和state
下一篇: Perl学习-undef值和defined函数
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值