perl学习笔记02_标量数组哈希
1. 概述
Perl是弱类型语言, 变量不需要指定类型, 解释器根据上下文自动选择匹配类型.
Perl有三个基本的数据类型: 标量($), 数组(@), 哈希(%).
2. 标量, scalar
标量变量以$标记.
my $a = 123; #数字
my $b = "123"; #字符串
my $c = 0x1F; #16进制
my $d = 047 ; #8进制
my $e = 11.4; #浮点数
my $f = 54.1e+2; #科学计数
标量运算
my $str0 = "hello" . " world"; #字符串拼接
my $str1 = "hello" x 3; #字符重复, hellohellohello, 注意是x不是*.
3. 数组, array
数组变量以@标记
my @a = (20, 30, "xx");
print("$a[0]\n"); #取数组元素, 使用正索引
print("$a[-1]\n"); #取数组元素, 使用负索引
my @b = qw/xx yy zz/; # 省略元素引号/逗号
my @c = (10 .. 20); # 起始值 .. 结束值, 表示10到20的所有元素
my @d = ('a' .. 'f'); # 表示 a到f的所有字母
#遍历数组
foreach my $v (@d){
print("$v\n");
}
my $e = scalar @d; #数组长度
my $f = $#d ; #数组的最大index.
my $var = "abc";
my @var = ("abc", "def");
push(@d, $var); #向@d末尾添加一个元素
push(@d, @var); #向@d末尾添加多个元素
my $g = shift @d; #弹出@d的第一个元素, 并赋值给$g
my $h = pop @d; # 弹出@d的最后一个元素, 并赋值给$h
my $l = unshift(@d, $var); #把$var添加到@d开头, 并返回新数组长度
数组切片:
my @a = (0 .. 10);
my @b = @a[2, 4, 7]; # 取第2,4,7个元素组成新数组
my @c = @a[3 .. 6] ; # 取第3~6个元素
将str切分为数组: split
语法: split [PATTERN [, EXPR [, LIMIT]]]
PATTERN: 分隔符
EXPR: 待切分的字符串
LIMIT: 元素个数
my $s = "a b c d e fg hi jk";
my @a0 = split(/\s+/, $s); # a, b, c, d, e, fg, hi, jk, 长度为8的数组
my @a1 = split(/\s+/, $s, 3); # a, b, "c d e fg hi jk", 长度为3的数组
将数组元素连接为str: join
语法: join EXPR, LIST
EXPR: 连接符
LIST: 列表或数组
my @a0 = ('i' .. 'n'); # 字母 i到n
my $s0 = join('-', @a0); # i-j-k-l-m-n
数组排序:
sort [subroutine] LIST;
数组合并:
my @a0 = (1, 3, 5);
my @a1 = (2, 4, 6);
my @b0 = (@a0, @a1); # 1 3 5 2 4 6
4. 哈希, hash
my %data0 = (
"a", "aaa",
"b", "bbb",
"c", "ccc",
"d", "ddd",
);
my %data1 = (
a => "aaa", # 使用=>时, key不能带空格
b => "bbb",
c => "ccc",
d => "ddd",
);
print("$data0{a}\n");
#遍历hash
foreach my $k (keys %data0) {
my $v = $data0{$k};
print("$k $v\n");
}
while(my ($k, $v) = each %data1) {
print("$k $v\n");
}
#判断key存在
if (exists $data1{"a"}){
print("key a exists\n");
}
#添加元素
$data0{"e"} = "eee";
#删除元素
delete $data0{"e"};