Perl(六)运算符一

本文深入探讨了Perl语言中的各种运算符,包括算术运算符、数字和字符串的比较符、逻辑运算符以及字符串运算符。详细解释了运算符的工作原理,如何在不同的上下文中自动进行类型转换,以及一些特殊的比较和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、运算符

:shell的数字和字符串的比较与perl相反

二、相关概念

三、算术运算符

# 说明1:+号操作符号两边需要数字(上下文的需要)会将字符串转化为数字!
print 1+"1.8" ."\n";     #2.8
# 说明2:如果开启"use warnings"会有内置警告,但是不会报错!
# 字符串中非数字的部分(前置的空白符号)被忽略
print "10dwfewf" *"3.1"; #31

print "(1)对小数取余截取整数:";
$a=25.6%7.6;
print $a; #4

print "(2)指数为小数的幂运算:";
$b=(25)** 1.5;
print $b; #125

四、数字比较符

说明:perl的比较操作符和bash完全相反。数值比较采用符号,字符串比较采用字母(文本形式)!

print 35 == 30+5; #1(真)
print "\n";
# 说明:假的话不输出-->但是可用于if条件判断!
print 35 !=30+5; #假(没有输出)
print 35 ==35.0; #1(真)
print 35 <'40';  #1(真)
print 20>='18';  #1(真)

# 数字比较"<=>"(会转换为数字)
print   3<=>2;          #1
print   0<=>'fdjsf';    #0,说明(有警告)
print  '2'<=>'3';       #-1

五、字符串比较

练习

"""
数值     字符串      意义
-----------------------------
==       eq        相等
!=       ne        不等
<        lt        小于
>        gt        大于
<=       le        小于或等于
>=       ge        大于或等于
<=>      cmp       返回值-1/0/1
"""

最后一个<=>cmp用于比较两边的数值/字符串并返回状态码-1/0/1:

说明:每一种标点符号组合在Perl里有特殊含义!

# (1)字符串比较-->false(没有输出)
print 35 eq '35.0'; #没有输出

# (2)自动把操作数转化为字符串

print 123 lt 45; #1 ('123' lt '45' ,因为1<4,字符串从左到右比较);

# (3)特殊的比较

print 123 gt $a; #1 (未定义转换为空串,就是字符0,'1'>'0')

# (4)特殊的比较

print 1234 lt 1243; #1 逐个比较(到第三位, '3' <'4')

六、字符串运算符

练习

use strict;
use warnings;
#(1)连接操作符-->字符串可以通过.操作符"显示"使用连接操作符!
print "hello "."linux\n";
# 有空格
print "hello " ."java\n";
print "hello".' '."c++\n";
# 注意:中间必须有空格,会将123转化为字符串然后拼接
print 123 ."\n";

#(2)重复操作符-->语法:字符串 x 数字,必须有空格!
print "hello " x 3 ."\n";
# 特殊1-->左操作数不是字符串
print 123 x 3 ."\n";
# 特殊2-->右操作数不是自然数(小数或者字符串非数字或者字符串数字)
# 特点是截取,(不说是取整,是因为取整有上取整和下取整)
print 'have' x "3.1" ."\n";
# 说明:右操作数会变成0,所以没有输出!
print 'fhdsj' x "defle" ."\n";

# 前置0的只对直接量有效(表示8进制),不能用于字符串的自动转换,自动转换总是按照十进制数字来处理!
print 'a' x 0177 ."\n";   #会将8进制转化为10进制,然后计算!
print 'a' x '0177' ."\n"; #0177自动转换为十进制,就是177
# 说明:二者的打印不同

说明:Perl常常会根据需要自动在数字和字符串之间进行类型转换,是如何转换的呢?

通过上下文类型,这里完全取决于操作符

举例:+需要数字,Perl会将操作数视为数字;.需要字符串,Perl就会将操作数视为字符串!

七、逻辑运算符

语法格式

# expr1 < and or && || // > expr2
# <not !>expr

细节

(1)&&运算符只有两边为真时才返回真,且短路计算:expr1为假时直接返回false,不会评估expr2!
(2)||运算符只要一边为真时就返回真,且短路计算:expr1为真时直接返回true,不会评估expr2!
(3)and和or基本等价于对应的&&和||,但文字格式的逻辑运算符优先级非常低!
(4)not和!求反,同样文字格式的not的优先级很低!
(5)因为符号格式的逻辑运算符优先级很高,所以往往左边和右边都会加上括号,而文字格式的优先级很低,左右两边不需加括号!

举例

if (($n >=18) && ($n <18)){
    print "...";
}

if ($n >=18 and $n <18){
    print "...";
}

#说明1:类似shell编程,这里暂时不考虑条件判断!

#说明:shell判断是根据命令的回传代码,其实是把每一个命令当成一个函数!

or运算符:往往用于连接两个,如果前面的成功就执行(不判断后面的),否则就执行后面的子句!

#需求:打开文件,如果打开失败,就结束该perl程序!

open LOG '<' "/tmp/a.log" or die "Can't open file!";

上面的缩进的等价方式

open LOG '<' "/tmp/a.log" 
    or die "Can't open file!";

三个等价语句

if ($m<$n){$m=$n}
$m=$n if $m<$n; #有点类似Python的感觉!
$m=($m < $n) ? $n : $m;

说明:条件判断放在逻辑控制中讲解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值