perl-数据类型
今天看perl竟然头疼,上午状态还好,下午刚好看到了reference,头就疼了
list
列表()
,各个值使用逗号分隔。print()
函数即为一个list
在perl中列表和数组是不同的概念,list指的是不可变的数据,array指的是一个指向list的变量,是一个动态存储列表的变量
1 | (1,2,3) |
列表中可以包含多种数据类型
1 | (1,2,3,'a','b') |
多列表嵌套
1 | (1,2,3,(1,2,3)) |
取值
索引从0开始,使用[]
指定索引
1 | (1,2,3)[0] |
多索引
1 | (1,2,3,4,5,6)[0,1] |
范围取值
1 | (1,2,3,4,5,6)[0..5] |
array
数组array:动态存储一个列表list
数组,使用@
表示,列表是不可变的数据集合,为了能够操作list中的数据,就有了数组array。它用来将列表存储到array变量中
1 | @numbers = qw/1 2 3 4 5 6/ |
取值
同list,索引从0开始,使用[]
。但是注意引用却是使用的$
1 | $numbers[0] |
为什么会这样写?这也是我学perl中目前碰到的唯一一个超级难理解的地方。比如说我要取的不是一个值则这么写
1 | @numbers[0..5] |
看了教程中的解释,觉得有点难以理解,感觉解释的不对:
the rule is that the prefix represents what you want to get not what you’ve got
我的理解是:
如果是通过这个变量自身的操作得到的是什么类型就是什么。如果得到的是一个字符串使用
$
,如果得到的是一个数组,使用@
如果是通过别的方法函数,那么就是就是一个数组的引用。使用
@
数组长度
将数组赋值给一个标量
1
my $len = @numbers
使用
scalar()
函数1
my $len = scalar @numbers
索引的最大值
$#
1 | my $counter = $#numbers |
修改数组中的值
支持范围操作
1 | @numbers[0,1] = qw/8 9/ |
更好用的取值赋值方式
shift
unshift
pop
push
hash
使用%
,使用key-value来存储数据
1 | my %language = qw(England English |
更通用的使用=>
符号,表示的更清晰。key的引号可省略
1 | my %language = (England => 'English' |
key必须唯一,否则后面的会覆盖前面的。这也是替换的方法
通过key找value
使用{}
1 | my $value = $language{'China'}; |
添加
1 | $language{'Korea'} = 'Korean'; |
删除
delete()
1 | delete $language{'Korean'}; |
修改
1 | $language{'China'} = 'Fanyan'; |
取所有key
keys()
1 | my %key = keys %language |