Perl函数(子程序)学习笔记
Perl子程序以sub定义,命名可同变量但避免重名内置函数,用&前缀区分。原型说明指定参数类型,返回值默认最后执行语句,可用return显式返回。参数通过@_数组传递,为局部变量,修改$_[]会改变主程序参数。
先说几个核心概念。在 Perl 里,子程序本质上就是一段独立分离的代码,它的好处显而易见——减少重复代码,让程序更容易读。你可以在程序的任何地方定义子程序,但通常大家习惯放在开头或结尾,方便管理。
来看一个最基本的定义方式:
sub subroutine{
statements;
}
以 sub 开头,子程序名字的命名规则和变量一样。这里有个细节:子程序可以和变量同名,但最好不要和内置函数重名。如果真重名了,用 & 前缀来区分——不带 & 调用的是内置函数,带上 & 才是你定义的子程序。当然,省略 & 时容易混淆,所以建议养成用 & 的习惯(或者靠上下文明确区分)。
还有一种带原型说明的定义方式:
sub subroutine($$){ #需要两个简单变量的参数
statements;
}
原型说明的作用是提前告诉 Perl 这个子程序期望接收什么类型的参数。这里的符号规则:
$表示简单变量@表示列表%表示散列&表示匿名子程序*表示引用
每个字符对应一个参数。如果前面加上 \(原文中写的是“前加为强制类型一致”,此处应理解为反斜杠),则是强制类型一致。用分号 ; 可以分隔必须参数和可选参数。比如 @$;$ 表示第一个参数为列表,第二个为简单变量,第三个简单变量可选。
二、函数返回值
Perl 子程序的返回值机制挺随性的。默认情况下,子程序中最后执行的一个语句的值就是返回值。注意:如果最后执行的是某个 if 块里的语句,那这个块中的结果也会成为返回值(即便它不在子程序文本的最后一行)。
$a=1;
这里不用显式加 return,直接 $retval; 就可以返回。再比如:
split(/:/,@a) 返回数组.
如果你想主动控制返回什么,用 return(retval) 语句,它会立即退出子程序并返回 retval。这个返回值可以是标量,也可以是列表。
另外,返回错误的情况也很常见。直接 return 会返回 undef,表示失败。还有一种更优雅的方式:用 eval('subroutine') 包裹调用,这样错误信息会保存在特殊变量 $@ 中。
三、函数参数传递
参数传递的方式很直接。调用时写 $sub1($num1,$unm2,$num3);,然后在子程序里通过 @_ 数组接收所有参数:
$sub1($num1,$unm2,$num3); 调用
sub sub1{
my($num1,$unm2,$num3)=@_;
}
my $num1=shift;
my $num2=shift;
my $num3=pop;
这里有几个关键点需要记住:
- 所有传入的参数都放在数组
@_中,每个元素通过$_[0]、$_[1]访问。 @_和$_[ ]都是局部变量。如果子程序内部再调用另一个子程序,新的@_会重新生成,互不干扰。- 但要注意:如果你直接修改
$_[0]的值,它会改变主程序中对应参数的值(因为 Perl 默认是按引用传递的)。 shift和pop可以用来逐个取出参数。shift取第一个并删除,pop取最后一个并删除,操作的目标就是@_。

Postman是一套面向API全生命周期的开发与测试平台,可在Mac上发送和调试多种协议请求,管理集合、环境及认证信息,并完成脚本测试、模拟服务、监控、文档发布和团队协作。它适合开发、测试及运维人员使用,提供个人免费方案。
Docker Desktop 是 Docker 官方为 Mac 提供的容器开发环境,集成 Docker Engine、命令行工具、Compose、Build、Kubernetes 与图形化管理界面。
Android Studio 是 Google 面向安卓应用开发提供的官方集成开发环境,基于 IntelliJ IDEA 构建。它整合智能代码编辑、Gradle 构建、界面预览、设备模拟、性能分析、调试测试及 APK 分析等工具。
PixPix 是面向品牌、卖家和内容团队的在线 AI 图片视频创作平台,提供图视频 Agent、无限画布、图片生成、视频生成、自然语言编辑及商品套图、产品精修和带货视频等电商工具。
Postman 是面向 API 全生命周期的开发与协作平台。Windows 桌面版可用于构建和发送 HTTP、GraphQL、gRPC、WebSocket、MQTT 等请求,并提供环境变量、集合、脚本测试、模拟服务、监控、文档及团队工作区等
Docker Desktop 为 Windows 开发者提供集成式容器环境,内置 Docker Engine、命令行工具、Compose、Build 与 Kubernetes 等组件,可在本机完成镜像构建、容器运行、日志查看和资源管理。













