商城首页欢迎来到中国正版软件门户

您的位置: 首页 > 文章列表 > 编程开发 > Perl函数(子程序)学习笔记

Perl函数(子程序)学习笔记

  发布于2026-06-29 阅读(0)

扫一扫,手机访问

先说几个核心概念。在 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 默认是按引用传递的)。
  • shiftpop 可以用来逐个取出参数。shift 取第一个并删除,pop 取最后一个并删除,操作的目标就是 @_

Perl函数(子程序)学习笔记

本文转载于:https://www.jb51.net/article/57965.htm 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

产品推荐

热门关注