Perl的数据类型大致分为四种:Scalar(变量)、ScalarArray(数组)、
HashArray(散列)、References(指针)
-----------------------------------------------------------------------------------------------------------------------------------------1Scalar(纯量变量):
#井字号开头的后面都是批注。#纯量变数以$开头。
#my是一种宣告变量的方式,它可以使变量区域化。
#宣告变量时若不加my或local则Perl会把它当作全域变量使用。#习惯上,我们会将字符串用双引号括起来,而数值就不用加引号。1-1常用的操作运算符1)、算术运算符
+(加)、-(减)、*(乘)、/(除)、**(幂)、%(余)、-(负)
(1)求幂(**)结果不能超出数的范围。当指数为小数时,底数不能为负数,例如:25**1.5=125,(-25)**1.5=?(不成立)
(2)取余(%)操作数为整数,否则要截取。第二个数不能为0(因为除数不能为0)
(3)负(-)-$a=$a*(-1)
此外,注意当一个字符串参加运算,需要转化为整数时,如果不能转化
为整数则值为0。例如:'2'+1=3,'a'+1=1
2)、数字比较运算符
<(小于)、=(等于)、>(大于)、==(等于)、<=(小于等于)、>=(大于等于)、!=(不等于)、<=>(比较)
(1)==:比较运算,比较的结果为真或非零,假或零
(2)<=>:比较运算例如:$a<=>$b,当$a>$b时,值为1;当$a<$b时,值为-1;当$a==$b时,值为0
(3)自动把操作数转化为整数,不能转化为整数则为0
(4)浮点数不精确,不要把值相近的数比较,否则得到的结果是出乎意料的3)、字符串比较运算符
lt(小于)、gt(大于)、eq(等于)、le(小于等于)、ge(大于等于)、ne(等于)、cmp(比较)
(1)字符串的比较原则:按照字母表的顺序比较,数字<大写字母<小写字母(a小―z大)
(2)字符串比较的次序:字符串从左到右比较。'azz'<‘bc'(即:首先a与b进行比较,然后z与c进行比较)
(3)当一个串是另一个的前缀时,长度长的为大。例如:dog(4)字符串可以从右向左进位,且是字母数字分别进行
(5)自动把操作数转化为字符串。123lt45=>'123'lt'45'(6)cmp等同于<=>,结果为-1,0,1
例如:$str1=”a”,$str2=”a“,则print($str1cmp$str2)==>0例如:$str1=”a”,$str2=”b”,则print($str1cmp$str2)===>-1例如:$str1=”b”,$str2=”a”,则print($str1cmp$str2)===>1(7)空串,0,Undef,这三种情况都为假
例如:如下比较的结果
35!=30+5#假35==35.0#真
'35'eq'35.0'#假(当成字符串来比较)'fred'lt'barney'#假'fred'lt'free'#假'fred'eq\"fred\"#真'fred'eq\"Fred\"#假''gt''#真4)、字符串连接(.)、字符/字符串重复(x)(1)连接(“.“),例如:$a=‘a'.'b';=>‘ab'
在print时可以直接写print$a$b=>print$a.$b;但是这两者的原理是不一样的
(2)重复(“x”),注意:前后有空格(目的:为了和变量名分开),例如:‘a'x5=‘aaaaa',若重复次数<1,则返回空串例如:\"5\"x4,即为:\"5555\"
例如:\"love\"x(4+1),即为:\"lovelovelovelovelove\"例如:\"4.8\"x4,即为:\"4.84.84.84.8\"例如:6.1x3,即为:\"6.16.16.1\"
即:左边是一个字符串,右边是该字符串出现的次数
5)、逻辑运算符(&&(and)(与)、||(or)(或)、!(not)(非)、xor(异或)(1)先算左边的值,后算右边的值
(2)&&和and的优先级不同,但除非特殊情况,很难有区别
6)、位操作运算符
&(按位与)、|(按位或)、~(按位非)、^(按位异或)、<<(左移)、>>(右移)
(1)操作数为二进制整数,如果是小数则截取为整数
(2)<<左移,移开后空位补0,值为原数值的2*N倍(例如:z<<4,则z=z*(2的4
次方))
(3)>>右移,首位补0,值为原值一半(并取整)(例如:z>>4,则z=z/(2的的次方))
7)、赋值运算符
=、+=、-=、*=、/=、%=、**=、&=、|=、^=、.=(1)$a+=1=>$a=$a+1
(2)可以连等$a=$b=3;=>$a=3;$b=3;
(3)混用($a=$b)+=3;=>$a=$b;$a=$a+3;(不建议使用)
8)、自增(++)、自减(--)
(1)不要在变量两边都使用此种操作符:++$var--(2)不要在变量自增/减后在同一表达式中再次使用:$var2=$var1+++$var1;(3)可用于字符串的自增,当z、Z、9时进位。$a=‘caz';$a++;==>$a=‘cba';(4)不能用于字符串的自减,当$a--时,按数字运算,字符先转化为0再自减
(5)如果字符串含有非字母数字符号,或数字位于字母中时,自增也先化为0再自增
例如:$a=‘ab*c';$a++;==>$a=1;例如:$a=‘ab5c';$a++;==>$a=1;
(6)预增$b=++$a,$a先自增再赋值,后增$b=$a++;$a先赋值再自增;反之,同理
例如:$a=1;$b=++$a;=>$a=2,$b=2;例如:$a=1;$b=$a++;=>$a=2,$b=1;
(7)只能用于单一变量,不能对运算后的变量进行。例如:($a+$b)++9)、逗号(相当于:将两条语句写在一行)适用范围:只有当两个语句关联紧密时才使用例如:$a+=1,$b=$a;=>$a+=1;$b=$a;例如:$a=\"ab5c\print$a.\"n\";
10、条件运算符条件?真:假(1)三个操作数:先对条件表达式运算,为真时执行:的左边的运算,为假时执行:的右边的运算
例如:$result=$var==0?14:7;(2)用于简单的条件
(3)条件表达式用在=的左边
例如:$condvar==43?$var1:$var2=14;
例如:$condvar==43?$var1=14:$var2=14;
三、操作符优先级别(precedence--优先级)
(1)一般的优先级如下:自增自减最高,单操作数高于多操作数,数字运算>比较运算(数字比较与字符串比较)>位运算>赋值运算>逻辑运算(2)数字运算:幂>*/>+-(3)比较运算:<(小于)、>(大于)高于(==与!=)
-----------------------------------------------------------------------------------------------------------------------------------------2ScalarArray:
Perl数组变量和列表的概念,列表是包含在括号里的一序列的值,可以为任何数值,也可为空,并且列表存贮于Perl数组变量中,与简单变量不同,Perl数组变量以字符\"@\"打头。
Perl数组变量和列表一、列表
列表是包含在括号里的一序列的值,可以为任何数值,也可为空,如:(1,5.3,\"hello\,空列表:()。
注:只含有一个数值的列表(如:(43.2))与该数值本身(即:43.2)是不同的,但它们可以互相转化或赋值。
二、Perl数组--列表的存贮
列表存贮于Perl数组变量中,与简单变量不同,Perl数组变量以字符\"@\"打头,如:@array=(1,2,3);注:
(1)Perl数组变量创建时初始值为空列表:()。
(2)因为PERL用@和$来区分Perl数组变量和简单变量,所以同一个名字可以同时用于Perl数组变量和简单变量,如:
$var=1;
@var=(11,27.1,\"astring\");1、Perl数组的存取
◆对Perl数组中的值通过下标存取,第一个元素下标为0。
试图访问不存在的Perl数组元素,则结果为NULL,但如果给超出Perl数组大小的元素赋值,则Perl数组自动增长,原来没有的元素值为NULL。如:@array=(1,2,3,4);$scalar=$array[0];
$array[3]=5;#now@arrayis(1,2,3,5)$scalar=$array[4];#now$scalar=null;
$array[6]=17;#now@arrayis(1,2,3,5,\"\◆Perl数组间拷贝
@result=@original;
◆用Perl数组给列表赋值@list1=(2,3,4);
@list2=(1,@list1,5);#@list2=(1,2,3,4,5)
◆Perl数组对简单变量的赋值@array=(5,7,11);
($var1,$var2)=@array;#$var1=5,$var2=7,11被忽略@array=(5,7);
($var1,$var2,$var3)=@array;#$var1=5,$var2=7,$var3=\"\"(null)◆从标准输入(STDIN)给变量赋值$var= @array= 2、字符串中的方括号和变量替换 \"$var[0]\"为Perl数组@var的第一个元素。 \"$var[0]\"将字符\"[\"转义,等价于\"$var\".\"[0]\",$var被变量替换,[0]保持不变。\"${var}[0]\"亦等价于\"$var\".\"[0]\"。 \"${var}\"则取消了大括号的变量替换功能,包含文字:${var}.3、列表范围: (1..10)=(1,2,3,4,5,6,7,8,9,10)(2,5..7,11)=(2,5,6,7,11)(3..3)=(3) ◆用于实数 (2.1..5.3)=(2.1,3.1,4.1,5.1)(4.5..1.6)=()◆用于字符串 (\"aaa\"..\"aad\")=(\"aaa\@day_of_month=(\"01\"..\"31\")◆可包含变量或表达式($var1..$var2+5) 5、列表/Perl数组的长度 Perl数组变量出现在预期简单变量出现的地方,则PERL解释器取其长度@array=(1,2,3); $scalar=@array;#$scalar=3,即@array的长度 $scalar)=@array;#$scalar=1,即@array第一个元素的值 可以用子Perl数组形式来交换元素:@array[1,2]=@array[2,1];7、有关Perl数组的库函数 (1)sort--按字符顺序排序 (2)reverse--反转Perl数组(3)chop--Perl数组去尾 chop的意义是去掉STDIN(键盘)输入字符串时最后一个字符--换行 符。而如果它作用到Perl数组上,则将Perl数组中每一个元素都做如此处理。 (4)join/split--连接/拆分 join的第一个参数是连接所用的中间字符,其余则为待连接的字符Perl 数组。 -----------------------------------------------------------------------------------------------------------------------------------------3HashArray(AssociativeArray):perlhash常见用法 #初始化%h为空数组%h={}; #用数组初始化%h为a=>1,b=>2%h=('a',1,'b',2); #意义同上,只是另一种更形象化的写法%h=('a'=>1,'b'=>2); #如果key是字符串,可以省略引号。%h=(a=>1,b=>2);#用{}来访问print\"$h{a}n\";#打印1 $h{b}='2b';print\"$h{b}n\";#打印2b #删除key用delete delete$h{b};#从$h删除'b'#清空hashundef%h得到hash的所有键值: #得到所有keys,顺序取决于hash函数,或者说是乱序 @all_keys=keys%h; #所有键值,是按hash的值从大往小排列的。值的比较是数字比较(比如说,10>9) @all_keys=sort{$h{$b}<=>$h{$a}}(keys%h); #所有键值,是按hash的值从小往大排列的。值的比较是数字比较 @all_keys=sort{$h{$a}<=>$h{$b}}(keys%h); #所有键值,是按hash的值从小往大排列的。值的比较是字符串比较(比如说,'10'<'9') @all_keys=sort{$h{$a}cmp$h{$b}}(keys%h);判断hash是否包含key:exists($h{$key}); Hash的长度 想要知道一个hash存放多少数据$hash_size=keys%h #把%h的长度放到$hash_size中printscalarkes%h,\"n\" #打印%h的长度。这里用了scalar来返回数组长度。遍历一个hash while(my($k,$v)=each%h){print\"$k--->$vn\";} 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- 69lv.com 版权所有 湘ICP备2023021910号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务