Table 4. 赋值运算符例子
表达式
|
等效表达式
|
$a = 1;
|
none (basic assignment)
|
$a -= 1;
|
$a = $a - 1;
|
$a *= 2;
|
$a = $a * 2;
|
$a /= 2;
|
$a = $a / 2;
|
$a %= 2;
|
$a = $a % 2;
|
$a **= 2;
|
$a = $a ** 2;
|
$a &= 2;
|
$a = $a & 2;
|
$a |= 2;
|
$a = $a | 2;
|
$a ^= 2;
|
$a = $a ^ 2;
|
注:
1. =可在一个赋值语句中出现多次,如:
$value1 = $value2 = "a string";
2. =作为子表达式
($a = $b) += 3;
等价于
$a = $b;
$a += 3;
七、自增自减运算符 :++、--
.不要在变量两边都使用此种操作符:++$var-- # error
.不要在变量自增/减后在同一表达式中再次使用:$var2 = $var1 + ++$var1; # error
.在PERL中++可用于字符串,但当结尾字符为'z'、'Z'、'9'时进位,如:
$stringvar = "abc";
$stringvar++; # $stringvar contains "abd" now
$stringvar = "aBC";
$stringvar++; # $stringvar contains "aBD" now
$stringvar = "abz";
$stringvar++; # $stringvar now contains "aca"
$stringvar = "AGZZZ";
$stringvar++; # $stringvar now contains "AHAAA"
$stringvar = "ab4";
$stringvar++; # $stringvar now contains "ab5"
$stringvar = "bc999";
$stringvar++; # $stringvar now contains "bd000"
.不要使用--,PERL将先将字符串转换为数字再进行自减
$stringvar = "abc";
$stringvar--; # $stringvar = -1 now
.如果字符串中含有非字母且非数字的字符,或数字位于字母中,则经过++运算前值转换为数字零,因此结果为1,如:
$stringvar = "ab*c";
$stringvar++;
$stringvar = "ab5c";
$stringvar++;
八、字符串联结和重复运算符
1. 联接: .
2. 重复:x
3. 联接且赋值(类似+=): .=
例:
$newstring = "potato" . "head";
$newstring = "t" x 5;
$a = "be";
$a .= "witched"; # $a is now "bewitched"
九、逗号运算符
其前面的表达式先进行运算,如:
$var1 += 1, $var2 = $var1;
等价于
$var1 += 1;
$var2 = $var1;
使用此操作符的唯一理由是提高程序的可读性,将关系密切的两个表达式结合在一起,如:
$val = 26;
$result = (++$val, $val + 5); # $result = 32
注意如果此处没有括号则意义不同:
$val = 26;
$result = ++$val, $val + 5; # $result = 27
十、条件运算符
与C中类似,条件?值1:值2,当条件为真时取值1,为假时取值2,如:
$result = $var == 0 ? 14 : 7;
$result = 43 + ($divisor == 0 ? 0 : $dividend / $divisor);
PERL 5中,还可以在赋值式左边使用条件操作符来选择被赋值的变量,如:
$condvar == 43 ? $var1 : $var2 = 14;
$condvar == 43 ? $var1 = 14 : $var2 = 14;
十一、运算符的优先级
Table 5. 运算符的优先级
操作符
|
描述
|
++
,
--
|
自增,自减
|
-
,
~
,
!
|
单目
|
**
|
乘方
|
=~
,
!~
|
模式匹配
|
*
,
/
,
%
,
x
|
乘,除,取余,重复
|
+
,
-
,
.
|
加,减,联接
|
<<
,
>>
|
移位
|
-e
,
-r
, etc.
|
文件状态
|
<
,
<=
,
>
,
>=
,
lt
,
le
,
gt
,
ge
|
不等比较
|
==
,
!=
,
<=>
,
eq
,
ne
,
cmp
|
相等比较
|
&
|
位与
|
|
,
^
|
位或,位异或
|
&&
|
逻辑与
|
||
|
逻辑或
|
..
|
列表范围
|
?
and
:
|
条件操作符
|
=
,
+=
,
-=
,
*=
,
|
赋值
|
and so on
|
|
,
|
逗号操作符
|
not
|
Low-precedence logical NOT
|
and
|
Low-precedence logical AND
|
or
,
xor
|
Low-precedence logical OR and XOR
|
运算符结合性(associativity):
Table 6. 运算符结合性
操作符
|
结合性
|
++
,
--
|
无
|
-
,
~
,
!
|
Right-to-left
|
**
|
Right-to-left
|
=~
,
!~
|
Left-to-right
|
*
,
/
,
%
,
x
|
Left-to-right
|
+
,
-
,
.
|
Left-to-right
|
<<
,
>>
|
Left-to-right
|
-e
,
-r
,
|
无
|
<
,
<=
,
>
,
>=
,
lt
,
le
,
gt
,
ge
|
Left-to-right
|
==
,
!=
,
<=>
,
eq
,
ne
,
cmp
|
Left-to-right
|
&
|
Left-to-right
|
|
,
^
|
Left-to-right
|
&&
|
Left-to-right
|
||
|
Left-to-right
|
..
|
Left-to-right
|
?
and
:
|
Right-to-left
|
=
,
+=
,
-=
,
*=
,
|
Right-to-left
|
and so on
|
|
,
|
Left-to-right
|
not
|
Left-to-right
|
and
|
Left-to-right
|
or
,
xor
|
Left-to-right
|
PERL运算符简单应用
一、赋值(Assignment)运算符
符号
|
范例
|
说明
|
=
|
$x=$y;
|
把$x的值赋给$y
|
+=
|
$x+=$y;
|
$x=$x+$y;把$x加上$y后再赋值给$x
|
-=
|
$x-=$y;
|
$x=$x-$y;把$x减$y后再赋值给$x
|
*=
|
$x*=$y;
|
$x=$x*$y;把$x乘$y后再赋值给$x
|
/=
|
$x/=$y;
|
$x=$x/$y;把$x除$y次方后再赋值给$x
|
**=
|
$x**=$y;
|
$x=$x* *$y;求出$x乘$y次方后再赋值给$x
|
%=
|
$x%=$y;
|
$x=$x%$y;把$x除以$y的余数后再赋值给$x
|
.=
|
$str1.=$str2;
|
$str1=$str1.$str2;把$str1这个字符串再加上$str2这个字符串后再赋值给$str这个字符
串
|
x=
|
$str x=$y;
|
$str=$str x $y;循环$str字符$y次再把结果赋值给
$str这个字符串
|
二、运算(Arithmetic)运算符
符号
|
范例
|
说明
|
+
|
$a=$x+$y
|
把$x和$y加后再赋值给$a
|
-
|
$a=$x+$y
|
把$x和$y减后再赋值给$a
|
*
|
$a=$x*$y
|
把$x和$y乘后再赋值给$a
|
/
|
$a=$x/$y
|
把$x和$y除后再赋值给$a
|
%
|
$a=$x%$y
|
把$x和$y除后再余数赋值给$a
|
**
|
$a=$x**$y
|
把$x和$y乘次方后再赋值给$a
|
++
|
$x++;++$x
|
把$x加一后再赋值给$x
|
--
|
$x--;--$x
|
把$x减一后再赋值给$x
|
.
|
$a=$x.$y
|
把$x字符串和$y字符串合拼后再赋值给$a
|
三、数值(Number Values)运算符
符号
|
范例
|
说明
|
>
|
$x>$y
|
如果$x大于$y返回1否则返回0
|
>=
|
$x>=$y
|
如果$x大于等于$y返回1否则返回0
|
<
|
$x<$y
|
如果$x小于$y返回1否则返回0
|
<=
|
$x<=$y
|
如果$x小于等于$y返回1否则返回0
|
==
|
$x==$y
|
如果$x等于$y返回1否则返回0
|
!=
|
$x!=$y
|
如果$x不等于$y返回1否则返回0
|
<=>
|
$x<=>$y
|
如果$x大于$y返回1;如果$x等于$y返回0;
如果$x小于$y则返回-1
|
四、字符串(String Values)运算符
符号
|
范例
|
说明
|
gt
|
$str1 gt $str2
|
如果$str1大于$str2返回1否则返回0
|
ge
|
$str1 ge $str2
|
如果$str1大于等于$str2返回1否则返回0
|
lt
|
$str1 lt $str2
|
如果$str1小于$str2返回1否则返回0
|
le
|
$str1 le $str2
|
如果$str1小于等于$str2返回1否则返回0
|
eq
|
$str1 eq $str2
|
如果$str1等于$str2返回1否则返回0
|
ne
|
$str1 ne $str2
|
如果$str1不等于$str2返回1否则返回0
|
cmp
|
$str1 cmp $str2
|
如果$str1大于$str2返回1;如果$str1=$str2返回0;
如果$str1小于$str2则返回-1
|
五、逻辑(Logical)运算符
1.$x && $y(AND)
$x
|
$y
|
结果
|
真(True)
|
真(True)
|
真(True)
|
真(True)
|
假(False)
|
假(False)
|
假(False)
|
真(True)
|
假(False)
|
假(False)
|
假(False)
|
假(False)
|
1.$x || $y(OR)
$x
|
$y
|
结果
|
真(True)
|
真(True)
|
真(True)
|
真(True)
|
假(False)
|
真(True)
|
假(False)
|
真(True)
|
真(True)
|
假(False)
|
假(False)
|
假(False)
|
1.! $x(Not)
$x
|
结果
|
真(True)
|
假(False)
|
假(False)
|
真(True)
|
六、其他运算符
指令:
|
..区域运算符(Range Operator)
|
说明:
|
这个运算符是Perl语言中特别有用运算符且很实用。
|
范例:
|
|
|
|
@digits=(1..9);
|
#这时@digits=(1,2,3,4,5,6,7,8,9);
|
|
@digits=('01'..'05');
|
#这时@digits=(01,02,03,04,05);
|
|
@char=('A'..'E');
|
#这时@char=(A,B,C,D,E);
|
|
@total=(1..3,'A'..'B');
|
#这时@totalr=(1,2,3'A','B');
|
指令:
|
判断运算式?运算式1:运算式2条件运算符
|
说明:
|
这个运算符的意义和C语言一样,如果判断运算式的值是真的
话,则做运算1的运算,如果判断运算式是假的话,则做运算式
2的运算。
|
范例:
|
|
|
|
$price=($age>60)?100:200;
|
|
如果$age大于60的话,则$price等于100;否则$price等于200。
|
七、常用的文件数据(File test)运算符
范例
|
说明
|
-r $file
|
如果$file是可读取的话,返回1的值
|
-w $file
|
如果$file是可写入的话,返回1的值
|
-x $file
|
如果$file是可执行的话,返回1的值
|
-e $file
|
如果$file存在的话,返回1的值
|
-o $file
|
如果$file是被执行者所拥有的话,返回1的值
|
-s $file
|
返回$file的文件大小(bytes)
|
-f $file
|
如果$file是正常文件的话,返回1的值
|
-t $file
|
如果$file是文本文件的话,返回1的值
|
-b $file
|
如果$file是binary文件的话,返回1的值
|
-m $file
|
返回文件最后一次更改时间到现在的日期数
|
redis01:/root# cat x2.pl
my $str="212121a19823a456123";
if ($str =~/.*a(.*)23/){print "1----".$1."\n";};
if ($str =~/.*?a(.*)23/){print "2----".$1."\n";};
redis01:/root#
perl
x2.pl
1----4561
2----19
9.3.1原则1 正则表达式有三种形式:匹配、替换和转换。在表 9-1
中
列有三种正则表达式
运算符
。接下来对每一个表达式给出详尽解释。匹配:m//这种形式表明在//内部的正则表达将用于匹配 = ~或 !~左边的标量。为了语法上的简化用//,略去m。替换:s///这种形式表明正则表达式将被文本替换,为了语法的简化用//略去s。·转换:tr///这种形式包含一系列的字符
第二章 标量数据
Perl
中
的标量表示的范围很大,包括数字和字符/字符串。而且数字也不像c
中
有浮点数,单精,双精,整数...之分,只要是数字就是标量。而且所有的数字其内部格式都一样,
perl
将整数保存为浮点数,计算也是按照浮点数进行计算。 数字的表示方法:(在这方面还是可以看出
perl
的随意性)1.25255.0007.25e45-6.5e24-12e-24-1.2E-230-406129804
<br />1、数字
运算符
:+(加) 、-(减)、 *(乘) 、/(除)、**(乘方/乘幂)、%(取余);<br /> 这些
运算符
混合了整数、浮点数和实数运算,运算的结果都寸入了正确的数字上下文
中
;<br /> <br /> 复合赋值
运算符
:<br /> +=、-=、*=、/=、**=、%=、.=、&=、|=、^=、<<=、>>=、&&=、||=;<br /> <br /> 自增/自减
运算符
: ++/--<br /> ++
运算符
除了可用于数字运算之外,还可以用于字符串运算,而--
1. 在
Perl
中
,注释由#开始,直到本行结束(
Perl
中
没有“块注释”(block comments))
(1) 在Unix 系统
中
◆,如果文本的第一行前两个字符是“#!”,接着的就是执行下面文件的程序
#! /usr/bin/
perl
print “Hello,word!\n”
(2) 在非Unix 系统
中
,传统上把第一行写做#!
perl
。
2. s/\...
1、标量数据
标量(scalar)是
perl
里面最简单的一种数据类型,对于大部分标量来说,要么是数字,要么是由字符组成的序列(字符串)。在
perl
中
这两者大多情况下都是可以在内部转换的。-----字符串就是独立的一个标量值。
标量可以存储在标量变量里,也可以从文件和设备读取或者写入这些位置。
1.1、数字类型的标量
perl
中
的总是按"双精度浮点数(double-precision floating-point)"的要求来保存数字并进行运算。即所有数字的内部格式都相同。---双精度浮点数是当初用来编