正所谓前人栽树,后人乘凉。
参考资料 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 解释器会根据上下文来决定变量的类型。