Perl 标量的操作符
今天来看看标量的操作符,标量可以分为两类:一类是数字,另一类是字符串。在perl中这两类数据可以相互转化,但是操作还是有区别的。
下面先介绍数字类型的操作符:
数字类型的运算操作符有一下几种:
+(加),-(减),*(乘),/(除),-(取反)。
不会的举手,好没有。
下面讲一些难的。
第一个是“%”(取余)。嗯,会C语言的可以退场。这个操作符的使用方法和“/”差不多,但是结果是除之后的余数。例如:
$a=6%5;这时$a的值为1;
$b=5%6; 这时$b的值为5。
如果在进行求余运算时不是整数,那么四舍五入后进行运算,不可以对0求余噢!
第二个是幂运算(**)。
$c=2**3; 这时$c的值为8。相信我,我写了一个程序实验过的,程序如下:
#!/user/bin/perl -w
use strict; {
my $a=2**3;
print $a;
}
还有两种我们应该知道的运算符是“++”和“--”。“++”在自身基础上面加一,“--”在自身基础上减一。这种运算在c里面经常用的。
数字的比较运算符有下面几个: “<”,“>”,“<=”,“>=”我想这几个我就不用解释了。再有一个就是“==”这个运算符用来对比两个数字是否相等。然后就是“!=”表示两个数字不等。
还有一个好玩的比较运算符是“<=>”,这个运算符当左边的数字小于右边的时返回-1,相等时返回0,当左边的大于右边的时返回1。
另外就是位操作符了,和c一摸一样。
位与:& 位或:| 位非:~ 位异或:^ 左移:$x << 1 右移:$x >> 2
注:不要将&用于负整数,因为PERL将会把它们转化为无符号数。
然后要讲一讲的是赋值操作符,最基本的赋值操作符是“=”,(废话!)然后一种是“+=”表示在自身基础上面增加。例如:
$d=3; $d+=3; 这时$d就等于6了。
相应的还有“-=”,“*=”,“/=”,“**=”,“^=”,“&=”,“|=”,“~=”。 数字的操作符大致就有这些了。
下面是关于字符串的操作符的介绍。两个字符串相加(连接)用“.”进行。例如:
$e="hello "."all";
这时$e的值为“hello all”相应的也就有“.=”运算了。
另外还有一个运算符是x,没错,就是它。用来表示……只可意会,不可言传。
$f="f"x5; 此时$f的值为"fffff",明白了吧?
字符串的比较用以下的操作符进行:
“lt”意为“小于,less than”;
“gt”意为“大于,greater than”;
“eq”意为“等于,equal”;
“le”意为“小于等于,less than or equal”;
“ge”意为“大于等于,greater or equal”;
“ne”意为“不等于, not equal”;
“cmp”意为“比较,返回 1, 0, or -1,compare”。
可以看出来字符串的操作和数字的操作是相对的。
另外对字符串可以进行“++”运算,这时将会把字符串的ascii码加一。但是"z"++却是"a","Z"++ 是"A","9"++是0,"ab99"++将会得到"ac00"。呵呵,很好玩吧?字符串是没有-,*,/等运算的。如果我们对字符串进行这些运算则表示我们要把字符串转换成数字然后进行计算。如果这个字符串是"111"还好说,如果我们强制perl把例如"aaaaa"一类的字符串进行数字运算,perl会把这些字符串转换成0。因此"aaa"--将会得到-1。很好玩是不是?呵呵,perl还有很多好玩的东西。
对标量进行操作还可以使用下面的函数。
第一个是length(),这个函数可以返回变量打印出来的长度。例如:
length(23),将会返回2;
length("hahaha"),将会返回6;
length(1)将返回1。
在perl5中length("你好"),将会返回4,听说在perl5.6中将不会。我没有实验过,不好说什么。
第二个函数是chop()。这个函数将会节掉字符串中的最后一个字符,例如:
$g="aaa";
chop($g);
这时$g中的值是"aa";同时chop会返回它所截下来的字符。试一试 $g="你好"; chop($g); 会发生什么?
第三个函数是chomp(),这个函数仅仅将字符串末尾的换行符裁掉。
第四个函数是substr()这个函数可以从一个字符串中截取一段长度的字符串并将其返回。例如:
$h="hello all";
$i=substr($h,3,5)
将会从“hello all”中截取长度为5的字符串,就是"lo al"。试一试这样呢?
$h="你们好吗?";
$i=substr($h,3,5);
第五个很有用的函数就是defined(),这个函数用来判断一个数据是否已经定义。在perl中,一个数据如果没有定义,那么他将会是一个叫做undef的特殊值。 defined()是一个非常有用的函数。至少我经常用。有其是在判断cgi输入的时候。