比整个屏幕长的脚本都应该加上use strict;
数据元素
变量
当你需要声明一个复杂的字符串时,可以使用heredoc语法:
|
|
Undef
Perl里的undef表示一个未分配、不确定、未知的值。
一个声明了但是没有定义的标量值就是undef:
|
|
数字
Perl支持整型数字和浮点数字,你可以使用不同的方式来表示它们,二进制、八进制、十进制、十六进制:
|
|
还可以使用下划线来增加可读性:(注意不是逗号,因为逗号在Perl中有特殊意义)
|
|
列表
列表list 标量的有序集合;数组array 储存列表的变量
使用范围操作符(..)可以很方便的创建列表:
|
|
可以使用qw()操作符分隔空白来产生字符串列表:
|
|
数组操作
压入、弹出
最后一个元素的索引 $trees[$#trees]
reverse 反向 @fred = reverse @fred
#本身不修改
排序
|
|
流程控制
条件分支、循环
使用后缀形式,添加括号增加可读性:
|
|
三目操作符
三目操作符(? :)可以根据给定的条件选择执行表达式.
条件表达式为真时执行表达式1,条件表达式为假时执行表达式2:
条件表达式 ? 表达式1 : 表达式2
|
|
循环控制
next-立即进入下一循环:
last-立即结束循环。
redo-重新进入当前迭代,返回本次循环的顶端(无需评估循环条件)。
循环嵌套时,可能不容易让人理清楚结构,这时可以使用标签:
|
|
哈希
访问哈希
访问键
访问值
访问键值对
each 函数,唯一使用地方就是在while循环中
用哈希去重复用法
|
|
exists 函数:检查哈四中是否有某个键
|
|
反转 松绑哈希
|
|
去除哈希里的键
|
|
符号
数学操作符
|
|
自增 自减
|
|
双引号里的转义字符
|
|
字符串操作符
字符串操作符为操作数提供字符串语境。比如
逻辑操作符
逻辑操作符为操作数提供布尔语境。如&&, ||, and, or,//,三目操作符(?:) 逻辑非 (!), not (优先级比!低) ,还有xor。
注意//和||的区别,操作符//只要目标操作数有定义就为真,即使是0和空字符串。
优先级:
括号 > 量词 > 锚位和序列 > 择一(竖线|) > 字符、字符集、反向引用
位操作符
位操作符提供的是数字语境。这些操作符不太常见。
左移位(<<),右移位(>>), 逐位与运算(&), 逐位或运算(|), 逐位异或运算(^), 以及组合形式(<<=,>>=,&=,|=,^=)。
特殊操作符
自增操作符(++)的行为比较特别,当操作数是数字时就数值加一。如果是字符串就增长字符串。
重复操作符(x)也有着复杂的行为,在列表上下文中将列表重复;在标量上下文中,重复并连接成一个字符串。
范围操作符(..),在列表语境下会生成从一个操作数到另一个操作数的列表,可以是数字也可以是字符串。
在布尔语境下行为很不一样:操作符初始值为假,在左操作数为真时整体变为真值,持续这个状态直到右操作数为真时,整体再转变变为假值。
|
|
正则表达式
竖线 | 或 意思是左边或右边匹配都行
正则表达式 可进行双引号内插
可选修饰符: 可连起来使用,顺序不影响结果
锚位
命名捕获
为捕获串加标签 (?<name>PATTERN) print "$name"
通用变量
函数
函数参数
|
|
验证参数
某些时候参数验证是很容易的,比如验证参数的个数:
|
|
有时则比较麻烦,比如要验证参数的类型。因为Perl中,类型可以发生转换。如果你有这方面的需求,可以看看这些模块:Params::Validate和MooseX::Method::Signatures。
输入和输出
调用参数 @ARGV
由调用参数组成的列表,开始运行时,@ARGV已经塞满了调用参数。
6个特殊的文件句柄是perl保留的:
STDIN
STDOUT
STDERR
DATA
ARGV
ARGVOUT
使用say来输出 与print相比会再每行输出的结尾z自动加上换行符
printf格式化输出
|
|
|
|
|
|
perl套路
perl打乱list顺序
perl -MList::Util=shuffle -e 'print shuffle(<STDIN>);' < myfile
perl随机打乱数组
|
|