1.Perl用标量来表示单个事物,标量大部分是数字,或者有字符组成的序列。
2.数字分为整数和浮点数。 在Perl内部总是按“双精度浮点数“的要求来保存数字并进行计算。(Perl不存在整数值,整数常量会被转换成等效的浮点数值)
3.直接量:某个数字在Perl源代码的写法,指直接键入程序源代码中的数据。
浮点数直接量:用指数表示法 E:1.25 -3e24 前面的正负号可选
整数直接量:0 -20 758729(可在整数直接量中插入下划线,将若干位数分开75-8-7-29)
非十进制表示整数的直接量:八进制以o开头,十六进制以ox开头,二进制以ob开头,十六进制以A到F开头。若直接量超过4个字符,可以使用下划线。
4.数字操作符:常见的有加、减、乘、除、取模(先取整再求余)、乘幂(以**表示,幂次方)
5.字符串:即字符序列,由可输出的字母、数字及标点符号组成,范围在ASCII编码的32到126之间,和c不同,空字符没有特殊含义,不用来表示字符串的结尾。
若想在源代码中出现ASCII字符范围以外的字符,或使用Unicode书写的话,要加上utf-8编译指令,并以utf-8的编码方式保存文件。
字符串直接量有2种形式:单引号内的字符串和双引号内的字符串。
单引号内的字符串直接量:由一对单引号圈出的一串字符,前后两个单引号不属于字符串的内容,除'和\外,其他字符均表示本身,若想表示单引号',用\'表示,若想表示反斜线\,用\\表示。E:'\'\\' 两个字符
双引号内的字符串直接量:由一对双引号圈出的一串字符,有反斜线组合表示特殊字符(即反斜线转义)
E:\n 换行 \r回车 \t水平制表符
双引号内字符串的另一特性是变量内插:在使用字符串时,将字符串内的变量名称替换成该变量当前的值。
对Perl来说'barey'和"barey"是等价的,可以自由选择任何一种表达方式。
6.字符串操作符
字符串之间用.操作符连接起来,E:"hello".' '."world" 'hello world'
重复操作符x :操作符左边是要重复的字符串,是字符串类型,右边是重复次数(使用前会先取整,当次数小于1时,生成长度为0的空字符串)
7.数字和字符串之间的自动转换
Perl 会根据操作符需要自动在数字和字符串之间进行类型转换。(+操作符需要的是数字,Perl就会将操作数视为数字,.操作符需要的是字符串,Perl就会将操作数视为字符串,*操作符如果遇到字符串类型,会自动将字符串转换成等效的十进制浮点数进行计算,其他非数字部分会被忽略)
前置零的技巧只对直接量有效,不能用于字符串的自动转换。字符串的自动转换总是按照十进制数字处理。
E:0377(十进制255的八进制写法) 会转换成‘0377’转换成十进制数字377
8.use warnings 开启警告功能,警告信息不会改变程序的行为,使用use diagnostics可以让编译命令报告鞥详细的问题描述。
进一步优化,使用Perl 的命令行选项-M只在需要时加载diagnostics编译指令。
9.标量变量:只存储一个值的变量
变量:存储一个或多个值的容器的名称。
标量变量的名称以$开头,然后是由字母或下划线开头的标识符,标识符只能由字母、数字或下划线组成,区分大小写。
$(魔符):取单个东西或者取标量。
在给变量取名的时候选择有意义的可以说明问题的名字。变量名称习惯全小写,适当用下划线隔开方便阅读。
10.标量赋值:变量名称=表达式的值
E:$barney=$barney*2 将右边的barney求值乘2再赋值给barney
11.双目赋值操作符:凡是所有用来求值的双目操作符可以加上等号成为相应的双目赋值操作符。
E:$fred+=5 $fred**3(将fred的值自乘3次)
有一种有字符串连接操作符.=
E:$str=$str." " 在$str末尾追加一个空格字符
12.print操作符接受标量值作为参数,将其传送到标准输出。使用print也可以输出一系列以逗号隔开的值。
13.标量变量内插(双引号内插):将字符串内出现的标量变量替换成该变量当前的值,只在""内起作用,如果标量变量未被赋值,就会用空字符串替换。
E:$meal="aa"; $barney="fred ate a $meal"; 等价于 fred ate a aa
tip:
若只需要打印变量值,不必使用变量内插的方式 E:print $fred (此时""多余)
若想输出字符串里的$,可在其前面用\转义。 E:$fred='hello' print "The name is \$fred.\n"或print 'The name is $fred' . "\n"
Perl检查变量名称时可能会将后面的字符当作变量名称的一部分,可以和shell脚本一样,用{}将变量名围起来以免发生歧义。
E:$what="steak" $n=3 print "fred ate $n ${what}s.\n"
14.通过输入字符的代码点来输入键盘上没有的字符,通过chr()函数转换成对应字符。ord()函数可以将字符转换成代码点。
15.Perl操作符的优先级和结合性同C一样,()优先级最高,当优先级级一样的时候根据结合性计算,在不确定优先级高低的情况下,使用()进行明确顺序。
16.比较操作符
比较 数字 字符串
相等 == eq
不等 != ne
小于 < lt
大于 > gt
小于或等于 <= le
大于或等于 >= ge
17.if 控制结构
条件语句的代码块周围一定要加上表示界限的花括号!!!
18.判断给定值的真假
Perl根据一些简单的规则来判断给定值的真假:
1.如果是数字,0为假,其他数字为真。
2.如果是字符串,空字符串' '为假,其他字符串为真。
3.如果既不是数字也不是字符串,先转换成数字或字符串再进行判断。
特殊的,Perl会将字符串'0'和数字0看作同一个值(字符串'0'是唯一被当做假的非空字符串)。
!单目取反操作符,由于Perl中没有专门的布尔型变量,所以!会返回代表真假的标量值,用数字1和undef表示真假。使用两次!操作会得到表示布尔值的变量。
19.读取从键盘输入的值:使用行输入操作符<STDIN>
把<STDIN>放在程序中希望返回标量值的位置,Perl会从标准输入读取一行文本(直到换行符为止)(一般输入缓存区没有任何数据,除非在程序启动期间预先打了一整行字符)由<STDIN>返回的字符串一般都在末尾都会带有换行符。
20.chomp操作符:只能作用于单个变量,且变量内容为字符串。
通常可以连用chomp()函数,E:chomp($text=<STDIN>); $text=<STDIN>; chomp($text);
Perl规则:任何需要变量的地方都可以对赋值运算表达式代替。
除非去掉括号会改变表达式的意义,否则括号可以省略。
21.undef值:在首次赋值前变量的初始值,代表空无一物。既不是数字也不是字符串但在具体的环境下可以看做是数字或字符串。
操作符在参数越界或不合理时也会返回undef,除非特殊处理,否则就会返回零或空字符串。
22.defined函数:判断某个字符串是undef而不是空字符串,若是undef,则函数返回假,否则返回真。