Perl(八)流程控制一

一、控制的分类

1.1)顺序、条件、循环

1.2)布尔值的问题

   (1) perl中没有专门的布尔值类型

   (2)任何的标量都可以成为控制结构的判断条件

   (3)表达式返回的真假值保存到变量中,在判断的时候可以直接检查该变量的值!

明确:表达式不一定是逻辑表达式,但一定要得出真假!

值的场景

(1)如果是数字,0为假,其余为真!
(2)如果是字符串,''空串为假,'0'也为假,其余字符串为真!
(3)逻辑值为假-->数字比较和字符串比较为假,逻辑运算符的结果(||,&7等)
(4)列表为空
(5)未定义-->(变量未定义,声明一个变量未定义-->undef)
(6)读取到文件的末尾(此时是undef-->未定义)

# 说明:上面的场景最终都会转换为undef,其余的场景为真!

备注1:Python中有(True,False)的布尔类型

备注2:shell中是通过命令回传码(逻辑运算符的底层还是回传码)判断是否执行相应的代码!

细节:如果是假,低版本的perl返回的是undef,高版本的perl返回的是空!

技巧会对判断的结果进行反转

1.3)关于perl的短路计算和//

特别:perl的短路计算非常特别,它返回的是最后运算的表达式的值

my $name = $myname || "malongshuai"
=cut
(1)当$myname变量存在时(0除外),它返回真,并将$myname赋值给$name;

(2)当$myname变量不存在时它返回假,于是评估"malongshuai",因为是个字符串,所以返回真,于是将malongshuai赋值给$name。

细节:但是如果$myname变量存在,但值为0(字符串的或数值的),由于它也返回假,导致$name被赋以"malongshuai"。
=cut

改进

#(1)先判断再赋值-->defined特点-->真(1),假(undef)

my $name = defined($myname) ? $myname : "malongshuai";

升级:上述写法太复杂,perl 5.10版本以后提供了更方便的"逻辑定义或"(logical defined-or)操作符//

use 5.16;
my $name = $myname // "malongshuai";

特点:只要发现左边的值是已经定义过的(不管是0还是'',还是'0'),直接进行短路计算,而不管该左边的值评估后是真是假!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值