3.2.Perl数据类型-标量
Perl 有三个基本的数据类型:标量、数组、哈希。以下是这三种数据类型的说明:
1.标量(单数)
1.1.标量直接量
1.1.1.数字
1.1.1.1.浮点型直接量
浮点数数据如:11.4 、 -0.3 、.3 、 3. 、 54.1e+02 、 5.41e03。
浮点寄存器通常不能精确地存贮浮点数,从而产生误差,在运算和比较中要特别注意。
#!/usr/bin/perl
$value = 9.01e+21 + 0.01 - 9.01e+21;
print ("第一个值为:", $value, "\n"); # 结果:0
$value = 9.01e+21 - 9.01e+21 + 0.01;
print ("第二个值为:", $value, "\n"); # 结果 0.01
1.1.1.2.整型直接量
整数实为浮点数的特例,存储是整数当做浮点数处理
重点掌握10进制整形。
2进制、8进制、16进制数:2进制以0b开头,8进制以0开始,16进制以0x开始
16进制的个位(0-f)
1.1.3.数字操作符
数字支持的运算符:加:+,减: -,乘: ,除法: /,取模: %,幂:* 等
比较操作符: > >= < <= == !=
1.1.2.字符串
1.1.2.1.字符集
支持Unicode字符集,使用utf8编码;
# 如果代码中有中文,最好加上;有特殊字符一定要加上;
use utf8;
1.1.2.2.字符串直接量
单引号:'abc生物信息123&&% \n ${abcd}123'
双引号:"abc生物信息123&&% \n ${abcd}123"
Perl双引号和单引号的区别: 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。
单引号:功能少 原样输出
双引号:功能多 支持变量内插 支持转义
1.1.2.3.双引号转义
Perl 语言中常用的一些转义字符如下表所示:
转义字符 | 含义 |
---|---|
\ | 反斜线 |
’ | 单引号 |
" | 双引号 |
\a | 系统响铃 |
\b | 退格 |
\f | 换页符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\0nn | 创建八进制格式的数字 |
\xnn | 创建十六进制格式的数字 |
\cX | 控制字符,x可以是任何字符 |
\u | 强制下一个字符为大写 |
\l | 强制下一个字符为小写 |
\U | 强制将所有字符转换为大写 |
\L | 强制将所有的字符转换为小写 |
\Q | 将到\E为止的非单词(non-word)字符加上反斜线 |
\E | 结束\L、\U、\Q |
1.1.2.3. 字符串操作符
链接符: . 格式: 字符串a . 字符串b
重复操作符: x 格式: 字符串a x 整数
比较操作符: gt ge eq lt le ne
1.1.2.4. 双引号变量内插
print "${x1}sssssssss";
1.2.标量变量
1.2.1.定义
符号:$
变量命名
1.2.2 操作符
赋值操作:= 格式:变量名 = 直接量
双目赋值操作:+= -= *= /= .= 等等
1.3.相关重要知识
1.3.1.操作符的优先级和结合性
操作符列表参考书本。
2 + 4 * 3
4 ** 3 ** 2
18 / 3 * 3
首先考虑不同操作符的优先级,相同的操作符再考虑结合性。
为了提高代码的可读性,强烈使用小括号明确优先级。
(4 ** 3) ** 2
注意:优先级和结合性不用背,遇到时查表或者直接使用小括号。
1.3.2.字符串的比较与数字的比较
返回值 true / false
1.3.3.布尔值
Perl没有专门的Boolean数据类型。
Perl靠一些简单的规则判断:
-
数字:0为假,其他为真
-
字符串:""或’'或"0"为假,其他为真
-
既不是数字也不是字符串,转换成数字或字符串后再判断
取反操作符:!
通常在Perl里, 返回真假时,习惯使用数字1表示真,使用undef表示假(不强制)
1.3.4.流程控制
1.3.4.1.if分支结构
if流程控制
if(布尔值){}
1.3.4.2.while循环结构
while(布尔值){}
1.3.5.标准输入输出
标准输出:屏幕输出, print函数
标准输入:键盘输入,输入行操作符: ,键盘输入,遇到回车后停止,所以输入的字符串是以"\n"结尾的。
1.3.6.chomp()函数
输入的最后一个回车通常是没用的,可以使用chomp去掉字符串的最后一个回车。
chomp()本质是一个函数,返回值是移除的字符个数,作用:去掉字符串的最后一个换行符。
$input = <STDIN>;
chomp($input);
chomp($input = <STDIN>)
chomp后的小括号可以不写;
Perl的一项惯例:去掉括号不会改变表达式的意义,括号就可以省掉。
1.3.7.undef值
定义的变量没有赋值时,变量的值就是undef,表示没有任何东西;
如果是数字类型,undef就类似0;
如果是字符串类型,undef就类似"";
但是undef既不是数字也不是字符串,完全是另一种类型的标量值。
Perl的许多操作符,在参数越界时,返回undef,但是不影响程序的执行,但是可能得不到正确的结果;可以使用use warnings;
1.3.8.defined()函数
defined():用于判断变量的值是否定义;如果是undef,函数返回假,否则返回真;
读到文件结尾(EOF)时返回undef