1、Perl数据类型之标量
- 标量:Scalar,以$符号开头
- 数字标量:
- 值为”数字“的标量
- Perl中的数字
- 全部为双精度浮点数:$data = 10; $data = 10.00;
- 普通放入表示方法:3.1415926,-500等
- 科学计数法:2.18e22,2.18E22,5.16e-10
- 特殊数字的表示方法:较长的、不带小数点的数字,可用下划线分开;非十进制数
- 数字标量:
- 字符串标量:
- 标量值为字符串,由引号标识
- 字符串由可输出的字母、数字和标点符号组成,如$data = “Hellow, World"
- 字符串的引号既可以是单引号,也可以是双引号,可灵活使用
- 单引号与双引号表示的区别:转义符只在双引号中有效
- 标量的声明
- 标量可以在任意位置随时声明并使用,标量的默认初始值为空
- 标量名可以是字符、数字或者下划线,区分大小写,取名应和用途相关
- 标量的作用域
- 标量的作用域指的是一个标量可以被有效访问使用的范围
- 两种标量的作用域范围:
- 包变量(全局的)
- Perl中一个package是一个包,主函数也可以看做一个包
- 默认情况下的变量为包变量,是包内的全局变量,在整个包及下面的子函数中都可用
- 私有标量
- 分为my类型和local类型
- my变量:只在本层模块中可以看到这个变量
- local变量:在本层及本层下层的函数中都可以看到的变量
sub g_print{ print "$x\n"; } sub test_my{ my $x = 11; print "call-my $x\n"; g_print; } sub test_local{ local $x = 20; print "call-local $x\n"; g_print; } $x = 9; test_my; test_local; print $x; # 运行结果 call-my 11 9 call-local 20 20 9
- 包变量(全局的)
2、Perl数据类型之数组
-
数组的定义
-
数组是标量数据的有序列表,是多个标量数据的一个集合。可以包含任意多个元素,从0到全部占满内存
-
数组以@符号作为标识
image.png
-
列表直接量:
-
包含了一系列值的列表,以括号标识,中间用逗号隔开
image.png
-
也可以用范围操作符".."来产生列表直接量:
-
该操作符会从左边的数字计数到右边,每次加1,产生一连串的数字
image.png
-
-
-
-
数组的赋值
- 对于纯字符串的列表,使用“qw”来表示,可省略对字符串加引号的过程
- 形式为:
- qw(string1 string2 string3); ##空格、制表符、换行符作为分隔符
- 等同于("string1","string2","string3");
- 也可用其他任何标点符号作为定界符,代替括号
- qw !string1 string2 string3! qw /string1 string2 string3/ qw #string1 string2 string3#
- 对数组进行赋值,可以直接将列表量传递给数组
- @array = ("string1", 1.5, 418); @array = qw(string1 string2 string3);
- 如果列表直接量中包含标量、数组,则会进行取值作为元素
- $test = "hello"; @array = ("hello", 123); @array2 = ($test, @arrray1, "How are you")
- 数组之间进行赋值:
- @array1 = ('string1', 1.5, 418); @array2 = @array1;
- 特殊的数组赋值方法:
- pop操作符:取出数组中最后一个元素,同时返回该元素值
- @array = (5..9); ##@array为(5,6,7,8,9)
- $test1 = pop(@array); ##$test1为9,@array为(5,6,7,8)
- $test2 = pop(@array); ##$test2为8,@array为(5,6,7)
- push操作符:添加一个元素(或一串元素)到数组的尾端
- @array = (5,6);
- push(@array,8); ##@array为(5,6,8)
- push(@array,1..5); ##@array为(5,6,8,1,2,3,4,5)
- shift操作符:取出数组最左边的元素,同时返回该元素值
- @array = (5..9); ##@array为(5,6,7,8,9)
- $test1 = shift(@array); ##$test1为5,@array为(6,7,8,9)
- $test2 = shift(@array); ##$test2为6,@array为(7,8,9)
- unshift操作符:添加一个元素(或一串元素)到数组的前端
- @array= (5,6)
- unshift(@array,8) ##@array为(8,5,6)
- unshift(@array,1..5) ##@array为(1,2,3,4,5,8,5,6)
- pop操作符:取出数组中最后一个元素,同时返回该元素值
-
数组元素的访问
- 通过索引对数组元素进行访问:
- @array = ("hello","world",123)
- $array[0]="hello"; $array[1]="world"; $array[2] = 123;
- 同标量$array没有任何关系
- 特殊索引值:
- 用$#<数组名>代表最后一个元素的索引值。$end=$#array
- 使用负数索引。
- $array[-1]代表最后一个元素值
- $array[-2]代表倒数第二个元素值
- 通过索引对数组元素进行访问:
3、Perl数据类型之引用
-
引用作为一种数据变量,可以指向变量、数组甚至子程序,代表值的地址
-
在Perl中,可以把引用称为指针,二者是通用、无差别的
-
变量、变量名、地址
image.png
-
软引用:
- 软引用类似于软连接,存储一个变量的名字
- $scalar = "hello";
- @scalar = ("hello","world",123);
- $refer = "scalar"; ##引用变量名
- 软引用的解引用
- $$refer ##实质为$scalar,即为“Hello“
- $$refer[0] ##实质为$scalar[0]
- 软引用类似于软连接,存储一个变量的名字
-
硬引用:
- 硬引用类似于硬连接,就是存储地址
- $scalarref = \$foo; ##标量引用,$foo = "hello";
- $constref = \186_282.42; ##常量引用
- $arrayref = \@arr; ##数组引用,@arr= 1..100;
- $arrRef = [1,2,3,4,5]; ##匿名数组的引用
- 硬引用的解引用
- 由于硬引用是地址,所以用{}来进行解引用
- $scalarref = \$foo; ==> ${$scalarref}, 简写为$$scalarref
- $constref = \186_282.42; ==> ${$constref}, 简写为$$constref
- $arrayref = \@arr; ==> ${$arrayref}
- $arrRef = [1,2,3,4,5]; ==> ${$arrRef}
- 硬引用类似于硬连接,就是存储地址
-
引用有助于创建复杂的数据
- @array = ([1..5],"hello world")
- ${$array[0]}{0} ##值为1
my $scalar = "Hello";
my @array = ("Hello","World",123);
my $scal_ref = \$scalar;
my $arr_ref = \@array;
## compare
my $scalar_com = $scalar;
my $array_0 = $array[0];
printf("scalar value:$$scal_ref\n");
printf("array0 value:$($arr_ref)[0]\n");
## modify the value
$$scal_ref = "Hello2";
$($arr_ref)[0] = "Hello2";
$scalar_com = "Hello3";
$array_0 = "Hellow3";
printf("scalar value: $scalar\n");
printf("array0 value: $array[0]\n");
# 输出结果
scalar value:Hello
array0 value:Hello
scalar value: Hello2
array0 value: Hello2
参考来源:https://www.jikexueyuan.com/course/901.html
▼更多精彩推荐,请关注我们▼
网友评论