Scalar标量
标量表示一个独立的东西,但并不限定是什么东西
标量是最简单的数据类型(数字/字符序列)
标量数据:表示数据的内容,即为“值”
标量变量:表示存储数据的容器
一、数字
所有数字的内部格式都相同
Perl使用底层c库处理数字,且统一使用双精度浮点数存储数据
编译与安装perl时,选择了怎样的编译参数决定了最终perl能达到的计算精度和大小范围(这是由底层库决定的,而不是perl解释库本身的限制)
在Perl内部,整型数字(不带小数点的数字)和浮点数字都统一转换为双精度浮点数来存储和计算
实质上,Perl内部时没有整型数字的,程序中的整型常量本质上还是双精度数字。
1. 整数直接量
直接写入程序代码的数据内容
perl可以在整数直接量中加入下划线来分割数字,以便更好看清数字
61298734000
61_298_734_000
2. 非十进制整数的直接量
八进制(Octal) 直接量以0开头,数字范围:0-7
十六进制(Hexadecimal) 直接量以0x开头,数字范围:0-9 a-f(A-F)
二进制 (Binary) 直接量以0b开头, 数字范围:0/1
前置0的写法只用于表示数字直接量,不能用于字符串和数字间的自动转换
3. 浮点数直接量
1.25
255.000
255.0
7.25e45 # 7.25乘以10的45次方
-6.5e-24 # 负6.5乘以10的-24次方
Perl 5.22新增了十六进制浮点数直接量的写法
用p表示以2为幂,和16进制整型数字一样,以0x开头
0x1f.0p3
十六进制的浮点数直接量就是Perl内部保存数字时所使用的形式,不存在转换带来的近似问题,没有round-off问题
4. 数字操作符
+ 加
- 减
* 乘
/ 除
% 取模(先取整,再求余数)
** 乘幂
二、字符串
1. 字符串
任意字符的接续序列
最短的字符串:不包含任何字符,空字符串
最长的字符串:长度无限制,甚至可以填满所有内存(当填满内存后,对该字符串不能进行任何操作) “无内置限制”
字符串:通常可输出的字母、数字、标点符号,其范围介于ASCII编码的32到126之间
由于字符串能包含任何字符,所以可以用字符串来创建、扫描或操控二进制数据(可以将一个图形文件或编译过的可执行文件读进Perl的字符串变量,修改其内容后再写回去)
此外,Perl也支持unicode
use utf8;
2. 单引号内的字符串直接量
除了单引号和反斜线字符外,单引号内所有字符都代表它们自己
3. 双引号内的字符串直接量
双引号内字符串可以使用变量内插(variable interpolated),在字符串中附带变量,结果用变量内的值替换
组合 | 意义 |
---|---|
\n | 换行 |
\r | 回车 |
\t | 制表符 |
\f | 换页符 |
\b | 退格 |
\a | 系统响铃 |
\e | 跳出(ASC编码的转义字符) |
\007 | 八进制表示的ASC值(此例中的007表示系统响铃) |
\x7f | 十六进制表示的ASC值(此例中的7f表示删除键的控制代码) |
\x{2744} | 十六进制表示的unicode代码点(此例中的U+2744表示雪花形状的图形字符) |
\N{CHARACTER NAME} | 任意一个unicode代码点,用对应名称书写 |
\cC | 控制符,Control键的代码(此例中表示同时按下Ctrl键和C键的返回码) |
\ | 反斜线 |
" | 双引号 |
\l | 将下个字母转为小写 |
\L | 将它之后的所有字符都转为小写,直到\E为止 |
\u | 将下个字母转为大写 |
\U | 将它之后的所有字符都转为大写,知道\E为止 |
\Q | 相当于把它到\E间的所有非单词字符加上反斜线转义 |
\E | 结束\L、\U、\Q开始的作用范围 |
4. 字符串操作符
. 连接
x 字符串重复操作符 将左边的操作数(要重复的字符串)重复N次(右边的重复数需要先取整)