- perl的四种变量:
scalar:以$开头的纯变量
数组:以@开头
Hash:以%开头
文件:大写
- perl中没有关键字,因此可以取名为$if的变量,但有内置变量,例如$_
- 整数的表示,15位的有效数字,16位及16位以后的数字被四舍五入地截断
12、 12e2(1200) e不分大小写、 -12、 1_200_000、 120_0000 perl处理数字时,自动忽略下划线、 012、 0x1f
- 浮点数的表示
11.4、 -0.3、 .3、 3. 、 5.4e2、 5.4e+2、 5.4e-2 指数部分e或E,+或-,然后跟1到3位的数字,指数的范围为:-309到308,指数太小则整个数值显示为0,指数太大则整个数值显示为#INF
- 最长匹配
当$str,$string都存在时,优先匹配$string.要匹配$str时,使用${str}ing
字符串可跨行写
- 转义字符
\b 退格,删除前面一个字符
\cn Ctrl-n
\e Esc
\E 是\L \U \Q的结束符
\f 换页
\l 下一个字母是小写字母
\L 其后所有的字母都是小写字母,直到\E结束
\u 下一个字母是大写
\U 其后所有的字母都是大写字母,直到\E结束
\r 回车 print “abcd\rxyz” 打印xyzd
\Q 不查找模式匹配字符
\v 纵向跳格tab
- 字符串的特殊用法
qq(string in qq) :相当于"string in qq"
q(string in q) :相当于'string in q'
其中()可换为<>,{},[]等配对字符对: qq{string in qq};也可换为任意//, ;;,等相同字符对: qq/string in qq/;
qq[string [in] qq]; qq[string <in> qq];也是对的
- 变量的初值
未创建时状态为undef,到达文件尾也为undef,
声明变量为未定义:undef $a;或$a=undef;
用在条件判断中:if($a==undef)
代替不关心的变量:$s="a:b:c:d"; ($a1,undef,undef,$d1)=split(/:/,$s);
如果有undef变量又不知在哪,可加-w参数进行提示: #!/usr/bin/perl -w
变量创建后状态为defined,一般用在条件判断中 if(defined $a)
一般未赋值就使用时,整数默认初值为0,字符在初值默认为空串“” :

$result=$undefined+2;
$oo = undef;
if($oo == 0)
{
print "==0\n";
}
if(!defined $oo)
{
print "not defined oo\n";
}
if($oo == undef)
{
print "==undef\n";
}
输出
==0
not defined oo
==undef
- 相关函数
length()串长度,数字位数,
sin, sqrt, rand, srand
uc, lc, ucfirst, lcfirst 大小写
substr,index,pod
转换函数ord, chr, pack, unpack
chop()截去最后一个字符,无论是什么字符
chomp()截去末尾的行分隔\n,行分隔符可由$/定义。截去多个行分隔符:先把$/设为空串"",再chomp。chop和chomp都是直接作用于源字符串。

#!/usr/bin/perl
$a="abcd";
chop ($a);
print "chop $a\n";
$a="abcd";
chomp($a);
print "chomp $a\n";
$abc="abc\n";
chop($a);
print "chop $a|";
$a="abc\n";
chomp($a);
print "chomp $a|";
$a="ab\n\n\n";
$/="";
chomp($a);
print "chomp many $a\n";
$/="cd";
$a="abcd";
chop($a);
print "chop $a|";
$a="abcd";
chomp($a);
print "chomp $a|";
- 算术运算,算术比较,字符串比较
幂运算符**是右结合性 $a=2**3**2;
对小数取余,要先截取整数 $a=25.6%7.6 即$a=25%7
位操作(&, |, ~, ^, <<, >>)的操作数也要是二进制整数,如果是小数也要先截取为整数
当一个字符参加运算时,自动转化为相应的整数,如果不能转换时则值为0。 ‘2’+1=3, ‘a’+1=1.
算术比较运算符 <=>,自动把操作数转化为整数,不能转换为整数的则为0 $a<=>$b
当$a>$b时,值为1 当$a<$b时,值为-1 当$a==$b时,值为0.
浮点数不精确,不要把值相近的数比较。
字符串比较运算符: lt, gt, eq, le, ge, ne, cmp,会自动把操作数转化为字符串 123 lt 45 ----> ‘123’ lt ‘45’
数字<大写字母<小写字母
字符串可以从右向左进位,但字母数字分别进行。
数字比较要把操作数转换为数字,不能转换就为0,串比较把操作数转换为字符串。
- 字符串连接和重复
连接运算符.
重复运算符x x前后有空格 'a' x 5 ='aaaaa' 如果重复次数<1,则返回空串。
- ++ --
可用于字符串的自增,只在自己的序列内增,当z,Z,9时进位,进位导致长度增加。 $a='az'; $a++; ------>$a='ba'; $a='Z'; $a++; ---->$a='AA';
不能用于字符串的自减,当$a---时,按数字运算,字符先转化为0,再自减。
如果字符串中含有非字母符号,或数字位于字母中,自增也先转化为0再自增。$a='ab*c'; $a++; $a='ab5c'; $a++; ---->$a=1;
条件表达式用于=的左边 $condvar==43?$var1:$var2 = 14;
一般:自增自减最高,单操作数高于多操作数,数字运算>比较运算>位运算>赋值运算>逻辑运算.
不管是+=,-=,*=都是赋值运算,所以具有右结合性。