Perl 数据类型

Perl 是一种弱类型语言,所以变量不需要指定类型,Perl 解释器会根据上下文自动选择匹配类型;

Perl 有三个基本的数据类型:标量、数组、哈希;以下是这三种数据类型的说明:

序号类型和描述
1标量

标量是 Perl 语言中最简单的一种数据类型。这种数据类型的变量可以是数值,字符串,浮点数,不作严格的区分;在使用时在变量的名字前面加上一个 $,表示是标量,例如:

$myfirst=123;     #数字123 

$mysecond="123";   #字符串123 
2数组

数组变量以字符 @ 开头,索引从 0 开始,如:@arr=(1,2,3)

@arr=(1,2,3);

引用单个的数组元素,使用中括号加 $ 的形式,如:$arr[0] 

3哈希

哈希是一个无序的 key/value 对集合。可以使用键作为下标获取值;哈希变量以字符 % 开头

%h=('a'=>1,'b'=>2); 

 

标量

数值

Perl 实际上把整数存在计算机中的浮点寄存器中,所以实际上被当作浮点数看待,这也就是说perl中以双精度浮点数的方式保存数字变量

在多数计算机中,浮点寄存器可以存贮约 16 位数字,长于此的被丢弃整数实为浮点数的特例

数字变量的算数运算包括:+ - * / % **,这里幂运算的优先级最高,当有多个幂运算时, ** 的优先级是从右到左的:

$x = 12345;
if (1217 + 116 == 1333) {
    # 执行代码语句块
}

8 进制和 16 进制数:8 进制以 0 开始,16 进制以 0x 开始。例如:

$var1 = 047;    # 等于十进制的39
$var2 = 0x1f;   # 等于十进制的31

浮点数

浮点数数据如:11.4 、 -0.3 、.3 、 3. 、 54.1e+02 、 5.41e03。

浮点寄存器通常不能精确地存贮浮点数,从而产生误差,在运算和比较中要特别注意;指数的范围通常为 -309 到 +308;

 

字符串

Perl 中的字符串使用一个标量来表示,定义方式和 c 很像,但是在 Perl 里面字符串不是用 \0 来表示结束的;

Perl 双引号和单引号的区别: 双引号可以正常解析一些转义字符与变量,而单引号无法解析会原样输出;

perl中可以使用多行文本,如下所示:

改成双引号的结果同上面是一样的,并不会将空格忽略!! 

  • 引号的文本形式
  1. q相当于单引号
  2. qq相当于双引号
  3. qx相当于反引号
q(hello world)        # 等价于'hello world'
qq(hello world)       # 等价于"hello world"
qx(echo hello world)  # 等价于`echo hello world`

Perl 语言中常用的一些转义字符如下表所示

转义字符含义
\\反斜线
\'单引号
\"双引号
\a系统响铃
\b退格
\f换页符
\n换行
\r回车
\t水平制表符
\v垂直制表符
\0nn创建八进制格式的数字
\xnn创建十六进制格式的数字
\cX控制字符,x可以是任何字符
\u强制下一个字符为大写
\l强制下一个字符为小写
\U强制将所有字符转换为大写
\L强制将所有的字符转换为小写
\Q将到\E为止的非单词(non-word)字符加上反斜线
\E结束\L、\U、\Q

来看下面转义字符与单双引号的例子:

  • 字符串的连接和重复

字符串连接使用 . ,字符串重复使用小写字母 'x',后面跟重复的倍数,如果倍数是小数则会取整,如果倍数小于1则返回空;看下面例子:

小写字母 x 左边的变量会自动转换为字符串,如下:

  • 数值和字符串的类型自动转换

什么时候转换,以及向哪个方向转换,取决于操作符

例如对于算数运算符(+ - * / 等),会强制将字符串转换为数值,而对于 . 操作符需要的是字符串,会强制将数值转换为字符串,如下:

perl变态的一个地方是,以数字开头的字符串也可以强制转换为数值,但是只能转换数字开头(允许前导空白)的字符串,如下:

对于两种运算符一起使用时,会按照优先级进行转换后再运算,如下:

\

heredoc

所谓 heredoc 就是将后面的内容当做文档;既然是文档,就需要有文档起始符和文档结束符,分别标识文档从哪里开始和结束;

一般来说,所有支持 heredoc 的语言,文档的起始符和结束符都必须相同(一般使用EOF或eof作为起始符和结束符),且结束符必须单独占行且顶格书写;

使用概述:

  • 1.起始符必须后接分号,否则编译通不过;
  • 2.END可以用任意其它字符代替,只需保证结束标识与开始标识一致;
  • 3.结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符);
  • 4.开始标识可以不带引号号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号;带反引号则将字符串放进shell环境执行;
  • 5.当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法;

自增和自减

perl不仅支持数值类型的自增和自减,还支持字符和字符串的自增和自减,如下:

可以看到,字符串的自增是将字符串的最后一个字符加1,也就是a-->z,A-->Z,如果是最后一个字符是Z或z,那么再先前一个字符进位,如上面15行;

undef 和 defined() 函数

undef 表示变量未定义,它不等于字符串的空,也不等于数值0;

但是一般情况下,将undef 当作空或0就好了,因为在需要数值的时候,undef代表的就是0,需要字符串的时候,undef就是空字符串;

所以,perl中的完全可以直接使用未定义的变量,因为未定义的变量起始就是undef。它可以被当作0,也可被当作空字符串;

例如,下面两个语句中,$sum和$str都是未定义的,初始时它们分别表示数值0和空字串''

$sum += $i;
$str .= "abc";

可以直接将undef关键字赋值给某个变量,表示这个变量是undef的,这可以取消一个变量的定义,相当于bash shell中的unset:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值