发布于2026-06-29 阅读(0)
扫一扫,手机访问
Perl的控制结构其实非常灵活,甚至有些“任性”。它不像C语言那样只有固定的几套招式,而是提供了多种姿势让你搞定条件判断和循环。下面我们就把常用的几种方式过一遍,看看它们各自的门道。
最基础的条件判断,大家都不陌生:
这里要特别提一下——Perl允许你通过多个 elsif 来串联多个条件分支。整个逻辑就像流水线上的质检员:先检查第一个条件,如果成立,直接执行对应的代码块;不成立,则依次往下走,直到找到匹配的。如果所有条件都不成立,最后交给 else 兜底。这种写法在需要多级判断时比嵌套 if 清爽得多。

循环是Perl里最常用的控制结构之一,但玩法远不止“while”那么简单。我们来逐个拆解。
1、while循环
先判断条件,条件为真就进循环体。这是最经典的“先判断后执行”模式。
2、until循环
until 刚好和 while 反着来:条件为假时才执行循环体。实际上就等于 while (!条件),但语义上更直观——比如“直到某件事发生才停止”。
3、类C的for循环
这个就和C语言一模一样:
不过Perl在for循环里还能塞进逗号操作符,实现多条初始化或更新语句。看个例子:
这段代码等价于下面这个 while 版本:
两种写法效果一模一样,但for循环更紧凑,在需要同时维护多个变量时特别顺手。
4、针对列表(数组)每个元素的循环:foreach
语法很清晰:
举个实际例子:
需要留意两点:
$word 是局部变量。如果在循环之前它已经有值,循环结束后该值会恢复原样,不会受到循环内赋值的影响。$word,那么对应的数组元素也会跟着改变。看这个例子:执行之后,@list 就变成了 (1, 20, 3, 4, 5)。这是因为 $temp 本质上是数组元素的别名,改它就等于改数组本身。
5、do循环
语法长这样:
注意:do 循环会先执行一次循环体,然后再检查条件。这意味着循环体至少会被执行一次,适合那些“无论如何先干一次再说”的场景。
6、循环控制
Perl提供了三个控制关键字,比C语言多一个:
last:立即退出当前循环,等价于C的 break。next:跳过本次循环剩余语句,直接进入下一次迭代,等价于C的 continue。redo:这是Perl特有的。它的作用是“重做本次循环”,循环变量保持不变,直接回到循环体的最开头重新执行。注意,redo 在 do 循环中是不起作用的。另外,传统的 goto label; 也可以用,但不到万不得已真心不推荐,容易把代码搞成意大利面。
7、传统的goto label;语句
没错,Perl也支持 goto,但现代Perl编程几乎已经把它打入冷宫了。除非你在写一些极其底层的脚本,否则还是用结构化控制语句更靠谱。
Perl里有一种非常简洁的写法,把条件和语句放在同一行:
虽然条件写在后面,但Perl解释器会先判断条件,再决定是否执行前面的语句。这种写法在过滤数据或打印调试信息时特别省事,一行搞定。
指令: unless
unless 的中文意思是“除非”,也就是“如果条件不成立,则执行”。基本用法:
也可以写成一行:
或者更简洁:print"您的分数及格了!n" unless($score<60);
unless 也可以配合 else 使用:
例子:
进阶技巧:&&、|| 以及 ?: 作为控制结构
很多人可能不知道,Perl里 &&、|| 和三元操作符 ?: 不仅仅是运算符,它们还能当控制结构用。这其实是利用了“短路求值”的特性。
比如常规的 if 语句:
可以改写为:
但更极简的方式是:
原理很简单:&& 在判断时,如果左边为假,就不会再去计算右边;如果左边为真,为了确定整个表达式的结果,必须计算右边。所以“为真时的语句块”实际上只会在判别式为真时执行。
反过来,unless(this){that} 可以替换成 this || that:左边为假时,右边才会执行。
至于三元操作符 ?:,典型用法:exp1 ? exp2 : exp3。如果 exp1 为真,则求 exp2 的值并返回;否则求 exp3 的值。在需要根据条件返回不同结果时,一行代码就能搞定,比写 if-else 更紧凑。
以上就是Perl控制结构的核心套路。掌握了这些,写脚本时就能手起刀落,游刃有余。当然了,实际项目中建议优先选择可读性强的写法,别为了炫技把代码搞得太晦涩。毕竟代码是写给人看的,顺便再让机器运行一下。
上一篇:Perl中的子程序学习笔记
下一篇:Perl中的模式匹配学习笔记
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8