1.Perl的数据类型
之前了解到Perl 是解释型语言,因此会根据上下文自动选择匹配类型。
所以,Perl 是一种弱类型语言;强类型语言就是C++一样不指定类型会报错。
在Perl 有三个基本的数据类型:标量、数组、哈希。
1.1 标量(变量)
标量是 Perl 语言中最简单的一种数据类型。
这种数据类型的变量可以是数字,字符串,浮点数,不作严格的区分,统称为标量。在使用时在变量的名字前面加上一个 $(美元符号),表示是标量。
变量不需要显式声明类型,在变量赋值后,解释器会自动分配匹配的类型空间。
变量使用等号(=)来赋值。
#!/usr/bin/perl
$a = 1.51;
$b = 1;
$c = "size";
$d = 'q';
print qq($a\n);
print qq($b\n);
print qq($c\n);
print qq($d\n);
#结果:1.51 1 size q
并且对于变量:<该部分参考>
- 区分大小写
- 变量长度不限
- 关键字不冲突
#!/usr/bin/perl
# (1)区分大小写
$var='lower';
$Var='upcase';
print $var."\n";
# (2)变量的长度不限制
$this_is_a_long_legalname="long var";
print "var is $this_is_a_long_legalname\n";
# (3)if是关键字,没有冲突!
$if="key";
print "key bar id $if\n"
当然对于 Perl 的变量也会有特殊的变量: Perl的特殊变量
1.1.1 整数
Perl 实际上把整数存在你的计算机中的浮点寄存器中,所以实际上被当作浮点数看待。
在多数计算机中,浮点寄存器可以存贮约 16 位数字,长于此的被丢弃。整数实为浮点数的特例。
123 正数
0 零
-12 负数
12e2 科学计数方法(1200)
61_123_234 分割整数(不知道是多少位,用下划线_表示分割,其它语言用.号分割,perl"."号有特殊的含
义),处理会去除下划线!
012 说明:整数以0开头默认是8进制(octal)-->表示十进制10
0x1f 说明:以0x开头默认是16进制,f不区分大小写!
浮点数数据如:11.4 、 -0.3 、.3 、 3. 、 54.1e+02 、 5.41e03。
浮点寄存器通常不能精确地存贮浮点数,从而产生误差,在运算和比较中要特别注意。指数的范围通常为 -309 到 +308。
#!/usr/bin/perl
$value = 9.01e+21 + 0.01 - 9.01e+21;
print ("第一个值为:", $value, "\n");
$value = 9.01e+21 - 9.01e+21 + 0.01;
print ("第二个值为:", $value, "\n");
输出结果:
第一个值为:0
第二个值为:0.01
注意:
整数的截取和浮点数的精度:
- 整数20位以内(包含)不会截取,超过20位,数值太大的时候会以科学计数法的方式保留小数点14位!
- 浮点数的精度:指数范围在(-309,308),太小会显示0,太大会显示inf(linux平台下)(本部分参考博客)
1.1.2 字符串
Perl 中的字符串使用一个标量来表示,定义方式和 c 很像,但是在 Perl 里面字符串不是用 \0 来表示结束的。
Perl 双引号和单引号的区别: 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出。
但是用单引号定义可以使用多行文本,如下所示:
#!/usr/bin/perl
$var='使用单引号的
多行字符串文本
的例子';
print($var);
结果:
使用单引号的
多行字符串文本
的例子
总结起来:(本部分参考博客)
- 两种方式:单引号或者双引号标识的一组字符组成!
- 单引号:所见即所得,不进行转义( ' 和 \ 需要表示原始字符还是需要转义),不进行变量替换,字符串可以跨行(相当于\n)
- 双引号:弱引用,可以进行变量内插(变量替换)
- 变量内插的特点:最长匹配(贪婪),如果想最短匹配需要结合{}
下面这个例子就是变量内插的示例:
#!/usr/bin/perl
$str="short";
$string="long";
print "match longest $string\n";
print "match longest ${str}ing\n";
输出结果:
match longest long
match longest shorting
1.1.3 转义字符
\\ | 反斜线 |
\' | 单引号 |
\" | 双引号 |
\a | 系统响铃 |
\b | 退格 |
\f | 换页符 |
\n | 换行 |
\r | 回车 |
\t | 水平制表符 |
\v | 垂直制表符 |
\0nn | 创建八进制格式的数字 |
\xnn | 创建十六进制格式的数字 |
\cX | 控制字符,x可以是任何字符 |
\u | 强制下一个字符为大写 |
\l | 强制下一个字符为小写 |
\U | 强制将所有字符转换为大写 |
\L | 强制将所有的字符转换为小写 |
\Q | 将到\E为止的非单词(non-word)字符加上反斜线 |
\E | 结束\L、\U、\Q |
转义字符小示例:(参考网址)
#!/usr/bin/perl
# 换行 \n 位于双引号内,有效
$str = "菜鸟教程 \nwww.runoob.com";
print "$str\n";
# 换行 \n 位于单引号内,无效
$str = '菜鸟教程 \nwww.runoob.com';
print "$str\n";
# 只有 R 会转换为大写
$str = "\urunoob";
print "$str\n";
# 所有的字母都会转换为大写
$str = "\Urunoob";
print "$str\n";
# 指定部分会转换为大写
$str = "Welcome to \Urunoob\E.com!";
print "$str\n";
# 将到\E为止的非单词(non-word)字符加上反斜线
$str = "\QWelcome to runoob's family";
print "$str\n";
输出结果:
其他小示例:(参考博客)
# (1)相铃
print "bell ring:\a\n";
# (2)退一个字符-->backspace
print "back#\bspace\n";
# (3)回车-->跳到当行的开头-->abcy
print "copy\rabc\n";
# (4)值表符-->一般是四个空格
print "abc\tdef\n";
# (5)转义-->取消字符的含义{$,",\}
print "the \$var\n";
print "a quote \" in string\n";
print "a quote \\ in string\n";
# (6)\nnn表示8进制的ASCII码,\xnn表示16进制的ASCII码
print "\045\n";
bell ring:
backspace
abcy
abc def
the $var
a quote " in string
a quote \ in string
%
%
还有就是用 q 和 qq两个操作符进行操作。 还有就是反引号,请参考这个博客:Perl的反引号