Perl 数据类型:标量(scalar)
0. Perl 的优势和劣势:
- Perl适合在几分钟内写出虽然难看但是却够用的一次性程序;
- Perl擅长处理和文字有关的问题;
- 不适合封闭式二进制可执行文件(opaque binary);
- 标量分类
- 标量数据:(常量) 固定数据,表示确定的数据内容;
- 标量变量:(变量) 可变数据,表示数据的存储容器;
1. 标量数据:数字
Perl处理数字是用的是底层 C 库,并且使用统一的双精度浮点数来存储数据。实际程序中定义的整数在 Perl 内部而言,内部处理时都将其转换为双精度浮点数据来存储和计算。
1.1 整数(dec)
- 直接量(literal),在源代码中直接写生成数据内容的形式。(不就是常量的定义么?)
- 例:0, 2001, -40, 137,23746294269, 314_343_878
- 过长的数字读起来比较吃力,因此允许在整数直接量中加入下划线,仅仅为了方便阅读;
1.2 整数(non-dec)
- 二进制 :以 ‘0b’ 开头,0b1111_1111
- 八进制 :以 ‘0’ 开头,0377
- 十六进制:以 ‘0x’ 开头,0xFF,0xff
1.3 浮点数(float)
- 正常写法:1.25,3.67,78.000
- 科学计数法:-1.5E34,2.5e-12 (十进制中 e 表示以 10 为幂)
- 十六进制浮点数:0x1f.0p3 (十六进制中 p 表示以 2 为幂)
1.4 数字操作符
character |
meaning |
+ |
2+3 = 5 |
- |
4-2 = 2 |
* |
2*4 = 8 |
/ |
10.2 / 0.3 = 34 |
/ |
10/3 = 3.333333 (perl内部都是双精度浮点数哦) |
% |
10%3 = 1 |
% |
10.5%3.2 = 1 (取模运算:先取整,再求余) |
** |
2**3 = 8 |
2. 标量数据:字符串
- 字符串不限制长短,字符串通常是由可以输出的字母,数字和标点组成,其范围介于ASCII编码的32~126之间;
- Perl完全支持Unicode,但是使用之前必须声明 use utf8;(用于支持ASCII之外的其他字符)
2.1 单引号字符串
- 前后两个 ( ’ ),只是表示字符串的边界,并不是字符串的内容,用于让 Perl 判断字符串的开头和结尾;
- 例: ‘fed’, ‘barney’, ‘’, ’ ’ #3个字符,6个字符,空字符,空格字符
- 单引号中,除( \\ )( \’ )外,其他的都代表字符本身,如<\n>表示字符 \n;
- 单引号中没有转义字符,\\ 和\’ 是为了能够在单引号字符串中使用反斜线 \ 和单引号 ’ .
2.2 双引号字符串
- 前后两个 ( " ),只是表示字符串的边界,并不是字符串的内容,用于让 Perl 判断字符串的开头和结尾;
- 例:“hello”, “hello world\n”, “barney” # “barney” 和 ‘barney’ 是相同的;
- 双引号内的转义字符:
Argument |
Meaning |
\n |
换行符 |
\r |
回车符 |
\t |
水平制表符 |
\f |
换页符 |
\b |
退格 |
\a |
系统响铃 |
\e |
跳出(ASCII编码的转义字符) |
\007 |
八进制表示的ASCII值 |
\x7f |
十六进制表示的ASCII值 |
\x{2744} |
十六进制表示的Unicode代码点(这里代表❉) |
\N{CHARACTER NAME} |
任何一个Unicode代码点 |
\cC |
控制符 Control 按键的代码,\cC代表用时按下Control+C |
\\ |
反斜线 |
\" |
双引号 |
\l |
将下个字母转换为小写 |
\L |
将后面的字符都转为小写,直到 \E 为止 |
\u |
将下个字母转为大写 |
\U |
将后面的字符都转为大写,直到 \E 为止 |
\Q |
将后面的字符非单词都加上反斜线,直到 \E 为止 |
\E |
结束 \L, \U, \Q的作用范围 |
2.3 字符串操作符
Argument |
Meaning |
. |
拼接符“hello”.“world” -> “helloworld” |
. |
拼接符“hello”." ",“world” -> “hello world” |
x |
小写字母 x,“fred”x3 ->“fredfredfred” |
x |
5x4 -> "5"x4 -> “5555” (字符串操作,先转换为字符串) |
x |
5x4.8 -> 5x4 -> “5555” (先向下取整,再进行字符串重复操作) |
3. 数字和字符串的转换
- Perl 会自动转换数字和字符串数据,转换原则取决于操作符的意义,不用手动转换。
- 数字操作符:转换为数字 -> 计算
- 字符串操作符:转换为字符串 -> 处理
- 例:
- “12” * “3” ->36
- “12fred67” * “3” -> 36 (非数字部分被忽略,如果加了-w,会报警告)
- “fred” * “3” -> 0 (不包含数字的字符串被转换为零,如果加了-w,会报警告)
- 非十进制的转换