2018-11-11-Perl入门2

Perl数据类型

Posted by DL on November 11, 2018

正所谓前人栽树,后人乘凉。

参考资料 RUNBBO

1. Perl变量及数据类型初识

1.1 什么是变量

  • 变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间。

  • 解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型浮点型字符串等。

  • 整型、浮点型、字符串又称为数字字面量。

1.2 Perl变量的三个大类

  • Perl有三个基本的数据类型:标量、数组、哈希。

  • 标量、数组、哈希又由整型、浮点型、字符串等数字字面量构成。

1.2.1 标量

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

$myfirst=123;     #数字123 

$mysecond="123";   #字符串123 

1.2.2 数组

数组变量以字符”@”开头,索引从0开始,如:

@arr=(1,2,3)

@arr=(1,2,3)

1.2.3 哈希

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

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

1.3 数字字面量

1.3.1 整型

  • PERL实际上把整数存在你的计算机中的浮点寄存器中,所以实际上被当作浮点数看待。

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

整型变量及运算:

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

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

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

1.3.2 浮点数

浮点数数据如:

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

1.3.3 字符串

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

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

2. Perl变量的应用

  • 变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间。

  • 变量使用等号(=)来赋值。

  • 等号左边为变量,右边为值。

2.1 标量变量

  • 标量是一个单一的数据单元。 数据可以是整数,浮点数,字符,字符串,段落等。简单的说它可以是任何东西。

  • 标量变量从$开始, 如$a $b 是两个标量。

2.1.1 创建标量变量

实例:

#!/usr/bin/perl
 
$age = 20;             # 整数赋值
$name = "Runoob";   # 字符串
$salary = 130.50;     # 浮点数
 
print "Age = $age\n";
print "Name = $name\n";
print "Salary = $salary\n";

执行以上程序,输出结果为:

Age = 20
Name = Runoob
Salary = 130.5

2.1.2 数字标量

标量通常是一个数字或字符串,以下实例演示了不同类型的数字标量的使用:

2.1.3 字符串标量

对于不同类型的字符串标量的使用,要注意单引号和双引号的使用区别。

2.1.4 多行字符串

我们可以使用单引号来输出多行字符串。

实例:

#!/usr/bin/perl
 
$string = '
LiDing Blog
—— 生信菜鸟的入门历程!
';
 
print "$string\n";

执行以上程序,输出结果为:

LiDing Blog
—— 生信菜鸟的入门历程!

2.1.5 特殊字符

Perl中有一些特殊字符,如 __FILE__, __LINE__, 和 __PACKAGE__ 分别表示当前执行脚本的文件名,行号,包名。

注意: __ 是两条下划线,__FILE__ 前后各两条下划线。

这些特殊字符是单独的标记,不能写在字符串中,例如:

2.2 数组变量

  • 数组是用于存储一个有序的标量值的变量。

  • 数组变量以 @ 符号开始,元素放在括号内,也可以以 qw 开始定义数组。

  • 要访问数组的变量,可以使用美元符号($)+变量名,并指定下标来访问。

2.2.1 创建数组变量

实例:

#!/usr/bin/perl
 
@ages = (25, 30, 40);             
@names = ("google", "runoob", "taobao");
 
print "\$ages[0] = $ages[0]\n";
print "\$ages[1] = $ages[1]\n";
print "\$ages[2] = $ages[2]\n";
print "\$names[0] = $names[0]\n";
print "\$names[1] = $names[1]\n";
print "\$names[2] = $names[2]\n";

以上程序执行输出结果为:

$ages[0] = 25
$ages[1] = 30
$ages[2] = 40
$names[0] = google
$names[1] = runoob
$names[2] = taobao

程序中,我们在 $ 标记前使用了转义字符 () ,这样才能输出字符 $。

2.2.2 访问数组元素

  • 访问数组元素使用 $ + 变量名称 + [索引值] 格式来读取。

  • 数组索引值从 0 开始,即 0 为第一个元素,1 为第二个元素,以此类推。

  • 负数从反向开始读取,-1 为第一个元素, -2 为第二个元素。

实例:

@sites = qw/google taobao runoob/;
 
print "$sites[0]\n";
print "$sites[1]\n";
print "$sites[-1]\n";    # 负数,反向读取

执行以上程序,输出结果为:

google
taobao
runoob

2.2.3 添加和删除数组元素

  • Perl 提供了一些有用的函数来添加和删除数组元素。

下表列出了数组中常用的操作函数:

1	push @ARRAY, LIST  将列表的值放到数组的末尾

2	pop @ARRAY  弹出数组最后一个值,并返回它

3	shift @ARRAY  弹出数组第一个值,并返回它。数组的索引值也依次减一。

4	unshift @ARRAY, LIST  将列表放在数组前面,并返回新数组的元素个数。

实例:

#!/usr/bin/perl
 
# 创建一个简单是数组
@sites = ("google","runoob","taobao");
print "1. \@sites  = @sites\n";
 
# 在数组结尾添加一个元素
push(@sites, "baidu");
print "2. \@sites  = @sites\n";
 
# 在数组开头添加一个元素
unshift(@sites, "weibo");
print "3. \@sites  = @sites\n";
 
# 删除数组末尾的元素
pop(@sites);
print "4. \@sites  = @sites\n";
 
# 移除数组开头的元素
shift(@sites);
print "5. \@sites  = @sites\n";

2.3 创建哈希变量

  • 哈希是一个 key/value 对的集合。

  • Perl中哈希变量以百分号 (%) 标记开始。

  • 如果要访问哈希值,可以使用 $ + {key} 格式来访问。

2.3.1 创建哈希

创建哈希可以通过以下两种方式:

1. 为每个 key 设置 value

$data{'google'} = 'google.com';
$data{'runoob'} = 'runoob.com';
$data{'taobao'} = 'taobao.com';

2. 通过列表设置

列表中第一个元素为 key,第二个为 value:

%data = ('google', 'google.com', 'runoob', 'runoob.com', 'taobao', 'taobao.com');

也可以使用 => 符号来设置 key/value:

%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');

2.3.2 读取哈希的 key 和 value

  • 读取部分值:@{key1,key2}。

  • 读取所有key:keys %HASH

  • 读取所有value:values %HASH

2.3.3 哈希中添加或删除元素

实例:

#!/usr/bin/perl
 
%data = ('google'=>'google.com', 'runoob'=>'runoob.com', 'taobao'=>'taobao.com');
@keys = keys %data;
$size = @keys;
print "1 - 哈希大小: $size\n";
 
# 添加元素
$data{'facebook'} = 'facebook.com';
@keys = keys %data;
$size = @keys;
print "2 - 哈希大小: $size\n";
 
# 删除哈希中的元素
delete $data{'taobao'};
@keys = keys %data;
$size = @keys;
print "3 - 哈希大小: $size\n";

执行以上程序,输出结果为:

1 - 哈希大小: 3
2 - 哈希大小: 4
3 - 哈希大小: 3

3. 变量上下文

  • 所谓上下文:指的是表达式所在的位置。

  • 上下文是由等号左边的变量类型决定的,等号左边是标量,则是标量上下文,等号左边是列表,则是列表上下文。

  • Perl 解释器会根据上下文来决定变量的类型。