Perl自学(03)——基本数据类型

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的反引号

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值