数值和字符串
数值
- perl中以双精度(浮点数)方式保存和运算数值的方式
就算写的是整数,在内部也会转换成等效的浮点数类型保存。
但在perl内部,有些运算会将浮点数转换成整型进行,而且也有integer编译器可以强制编译成整型。
- perl中整数的表示方式
有3种方式:
123
0123
61_123_234
这里使用下划线(_)代替逗号表示千分位,因为perl中逗号有特殊意义。
- 算术运算
+ - * / % **
**的优先级在这里最高。
取模时,先两个数取整,再取模。
多个取幂符号时,**的优先级是从右向左进行的。
3 ** 4 ** 2 # 3 ** (4 ** 2) = 3的16次方
单双引号
perl对待单双引号的方式和shell有点类似。
- 单引号内,只有反斜线的转义效果存在(如
n不再是换行),其它全都当作字面符号(单引号自身除外)。 - 双引号内,反斜线、反斜线序列(
n,t...)、变量替换都允许。
\'malong\'
\'malong\'s girl friend\'
\'malongn\' # 这里没有换行
\"malongn\" # 换行了
\'malong
girl friend\' # 换行了,因为这里的换行是字面符号,不是n
\'malong\\n\' # 换行了
\"malong $var\" # 变量替换
有以下反斜线序列(转义序列):
n
r
t
l # 将下个字母转换为小写
L # 将后面的多个字母都转换为小写,直到遇到E
u # 将下个字母转换为大写
U # 将后面的多个字母都转换为大写,直到遇到E
Q # 和E之间的所有字符都强制当作字面符号
E # L、U和Q的结束符号
但即使没有"E",到了字符串结束的地方,转义序列就会结束。例如:
print \"Uabc\".\"xyzn\" # 输出ABCxyz
print \"abc\".\"xEyzn\" # 输出abcxyz
字符串连接和重复
字符串连接使用点(.)。
下面是等价的:
abc.cde
abccde
字符串重复使用小写字母"x",后跟一个重复倍数。如果倍数是一个小数,如3.2,则会取整。如果倍数小于1,则取整为0,所以倍数为0,返回空。
\"abc\" x 3
\"abc\" x 3.2
都将输出"abcabcabc"。
\"abc\" x 0.4 # 返回空
"x"符号左边会强制转换为字符串。
03 x 3 # 返回333
\"03\" x 3 # 返回030303
3 x 3 # 返回333
3.2 x 3 # 返回3.23.23.2
数值和字符串的类型自动转换
什么时候转换,以及向哪个方向转换,取决于操作符。
例如,算数运算符(+-*/等)需要的是数值,会强制转换为数值。"."操作符需要的是字符串,会强制转换为字符串。
\"0333\" + 22 # 返回355
\"033\".22 # 返回03322
033.22 # 返回2722,033表示8进制,转换为十进制为27(3*8+3)
perl变态的一个地方,数值开头的字符串也可以强制转换为字符串。但只能转换数值开头(允许前导空白)的字符串。
\"12abc\" * 3 # 36
\"abc12\" * 4 # 0
\" 12abc\" * 3 # 36
两种类型的操作符一起用的时候,会按照优先级进行运算:
\"abc\".5*3 # 返回abc15,乘法先运算
\"abc\".5 + 3 # 返回3,\".\"先运算
\"abc\".(5+3) # 返回abc8 继续阅读与本文标签相同的文章
下一篇 :
C++数据量很大那么内存对齐就很重要了
-
18段代码带你玩转18个机器学习必备交互工具
2026-05-18栏目: 教程
-
Istio的架构设计
2026-05-18栏目: 教程
-
深度学习高能干货:手把手教你搭建MXNet框架
2026-05-18栏目: 教程
-
mac彻底卸载应用
2026-05-18栏目: 教程
-
如何在微服务架构中实现安全性?
2026-05-18栏目: 教程
