perl-数据类型

今天看perl竟然头疼,上午状态还好,下午刚好看到了reference,头就疼了

list

列表(),各个值使用逗号分隔。print()函数即为一个list

在perl中列表和数组是不同的概念,list指的是不可变的数据,array指的是一个指向list的变量,是一个动态存储列表的变量

1
2
(1,2,3)
('a','b','c')

列表中可以包含多种数据类型

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. 将数组赋值给一个标量

    1
    my $len = @numbers
  2. 使用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
2
my %language = qw(England English
China Chinese);

更通用的使用=>符号,表示的更清晰。key的引号可省略

1
2
my %language = (England => 'English'
China => 'Chinese');

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