标量数据
数字直接量
浮点数据指数表示:7.25e45, -1.2E-4;
长数字便于阅读的格式:12_345_678_910_111,支持非十进制0x1234_5678,0x12_34_56_78;
字符串直接量
单引号内的字符串:只转义单引号和反斜线。双引号内的字符串:可以转义控制字符及非十进制写法表示的任何字符,例如:"\x{2668}","\007"八进制表示的ASCII值。字符串操作符:连接操作符“.”、重复操作符"x",例如:"Hello " . "world",5x4.8<==>"5"x4 -> "5555"。Perl会根据需要自动在数字和字符串之间进行类型转换,由操作符确定。前置零表示八进制仅对直接量有效,自动转换时会当做十进制来处理。不含数字的字符串自动转换时为零。
标量变量基本用法
定义:$number = 5; $number += 5; $str .= "Hello"; $str .= " world!";
打印:print "The answer is ", 6 * 7, ".\n"; print "Fred ate a $meat";undef值:未赋值变量默认值是undef,可以用defined函数测试。$var = undef; defined($var)返回假。获取用户输入 操作符:<STDIN>,$line = <STDIN>。可以使用chomp()操作符去除末尾换行符chomp($line = <STDIN>);
列表与数组
列表基本用法
直接量:(1, 2, 3),(“string”, 4.5), (1..100), ("name", "addr", "no"),其中..为范围操作符。
qw简写:qw(name addr no),内部不能使用\n或变量内插,忽略所有空白符。
其中()为定界符,可以使用任何标点符号,但左右字符需要匹配。 qw! name addr no !,如果内部字符和定界符冲突,可以使用反斜线转义。
赋值:($name, $addr, $no) = ("name", "addr", "no");
互换变量:($a, $b)= ($b, $a);
赋值时,如果数量不等,多余的变量被设置为undef,多余的值会被忽略。
数组基本用法
定义:@list = qw(name addr no);
数组元素访问:$fred[0] = "yabba"; Perl的数组可以自动扩大,数组$fred的最后元素索引为$#fred,其值为数组元素数量减一。
$fred[$#fred] = dabba,未赋值的部分为undef,数组也可以使用负数索引,-1为最后一个元素。$fred[$#fred] <==> $fred[-1]
空数组:@empty = ();
范围操作符:@num = 1..1000; @all = (undef, @num, 1001..2000);
数组赋值:@copy = @all;
操作符
pop
取出数组最后一个元素并返回 @array = 5..9; $nine = pop(@array); $eight = pop @array; pop @array; pop @empty <==>undef;
push
添加元素到数组末尾 push @array, 0; push @array, 1..10;
shift
取出数组第一个元素 $m = shift(@array); $n = shift @array;
unshift
数组开头添加元素 unshift @array, @others;
splice
添加或移除数组中间的元素最多接受4个参数,后两个可选,第一个参数目标数组,第二个参数数组开始位置,第三个参数数组长度,第四个参数是要替换的列表@array = qw (1 2 5); @list = splice @array, 2, 0, qw( 3 4 );
reverse
读取列表元素,并按逆序返回 @array = reverse @array。
sort
升序排序
each
返回数组下一个元素的索引和值
数组内插
打印数组时会在数组各个元素之间自动添加分隔符,由$"指定,默认为空格:print @number;;
索引表达式会被当做普通表达式处理,$array[$y-1] <==>$array[1] <- $y = "2*4";;
如果要在标量变量后面接着写方括号,需要和数组引用区别 ${fred}[3]或$fred\[3];
列表遍历:foreach $rock (qw/ bedrock slate lava /){} ,控制变量就是列表元素本身,修改控制变量会同时修改列表元素;
$_ Perl的默认变量 foreach (1..10){....$_....}依次为1-10。
标量上下文与列表上下文
@number 标量上下文返回列表元素数量,列表上下文返回列表
强制指定标量上下文 scalar @rocks 数组元素数量。
chomp(@line = <STDIN>);读入所有行,不包含换行符。
哈希
基本用法
定义:%hash
访问哈希元素:$hash{$key};
哈希展开:@list = %hash 展开为键值对列表,顺序不确定。
打印:不支持整个哈希的内插,仅单个元素。$hash{$key}。
裸字:由 字母数字下划线组成非数字开头的字符串,称为裸字。裸字部分处理可以简写,无需加引号。赋值:%hash = ('foo', 35, 'bar', 12.4, 2.5, 'hello',);为便于赋值,可以使用胖箭头=>,对Perl其等同于逗号,例如%hash = ('foo'=>35, 'bar' => 12.4, 2.5 => 'hello',);使用胖箭头时可以省略键的引号,但仅限于裸字。
花括号里的键名引用也可以省略引号,但如果不是裸字,就会作为表达式求值,$hash{ bar.foo } = 1<==> $hash{barfoo} = 1。
my %inversh_hash = reverse %hash; 将哈希展开为键值对并逆序,原来的键作为新哈希的值。
函数
keys values返回哈希的键列表和值列表。取得键和值得动作之间不修改哈希,键值的顺序是对应的。
each ($key, $value) = each %hash取下一组键值对。空的哈希键值均返回undef。
exists 判断哈希中是否存在键, exists $books{"dino"} dino是否存在于keys %books列表。
delete 删除键值对
%ENV哈希
Perl程序可访问的运行环境,例如PATH变量:$ENV{PATH};