perl的数据类型
发布时间:2020-12-16 00:32:33 所属栏目:大数据 来源:网络整理
导读:概括、perl有两种基本数据类型,标量类型和复数类型。 标量类型 ??????????????? |-----双精度浮点数 ??????????????? |-----字符串类型 ??????????????? |-----引用类型 复数类型 ??????????????? |-----数组 ??????????????? |-----散列表 函数类型 (函数
概括、perl有两种基本数据类型,标量类型和复数类型。 标量类型 ??????????????? |-----双精度浮点数 ??????????????? |-----字符串类型 ??????????????? |-----引用类型 复数类型 ??????????????? |-----数组 ??????????????? |-----散列表 函数类型(函数可以看成是具有执行属性的对象) 符号表类型 包类型 一、双精度浮点数 perl中所有的数值都是双精度浮点数类型,避免了类型转换之苦。 二、字符串类型 单引号字符串和双引号字符串。单引号字符串只有单引号和转义字符需要进行转义其他原样输出。 双精度浮点数和字符串之间可以根据上下文进行自动的转换。 print "123".456;#123456 print "123"+456;#579 print "ngood";#输出换行符 print 'ngood';#原样输出 print "abc" x 3;#abcabcabc,注意不是* $num=100; print "a $num b";#a100b,字符串内插 三、数组类型 @arr=(1,2,3); push(@arr,4);#push,pop最后一个元素 pop(@arr); shift(@arr);#shift,unshift第一个元素 unshift(@arr,1); print $arr[$#arr];#访问最后一个元素 print $arr[-1]; @arr1=@arr[0,2];#数组切片和@arr[0..2]相同 print @arr1; 四、散列表类型 %hash1=("first"=>1,"second"=>2,"third"=>3);#只能用字符串做key print keys(%hash1);#key的数组 print values(%hash1);#值的数组 $hash1{"fourth"}=4;#添加元素 delete($hash1{"second"});#删除元素 foreach(keys(%hash1)) { print($hash1{$_}); } print "exists" if(exists($hash1{"third"}));#判断是否存在 五、引用类型 可以把引用类型想象成c语言中的指针,perl中的引用类型用来构成复杂的数据结构,还有传递引用可以避免大量的数据拷贝。 #下面是标量的引用 $refer1="string";#refer1存储的是"string"的句柄 $refer2="string";#$refer2存储的是"string"的句柄 #标量的类型似乎意义不大 print $refer1; print $refer2; #数组的引用 @arr1=(1,3); @arr2=(@arr1,4); print ${$arr2[0]}[0]; print $arr2[0]->[0];#上一句的简洁写法 #如果没有数组引用就不能实现链式访问,因为数组元素必须通过引用来访问。 $refer3=[4,5,6];#获得一个数组的引用,这就是数组在定义是不用[]的原因,hash同理 push(@arr2,$refer3); print $arr2[2]->[2]; #散列表的引用 %hash1=("first"=>1,"third"=>3); push(@arr2,%hash1);#同理 push(@arr2,{"first"=>1,"third"=>3}) print $arr2[3]->{"second"}; #函数的引用 sub func { print "hello world!"; } $func1=&;func;# &表示func是一个函数句柄 &$func1; 六、符号表类型 每个包中都有一个全局的符号表,不同数据类型的变量可以拥有相同的变量名称,因为它们属于不同的命名空间。 $num1=100; *num2=*num1;#num2和num1此时公用一个符号表,也就是说num2是num1的别名 print $num2;#100 七、函数 #$sum=0; sub testfunc {#无需指定参数列表 my ($sum);#局部变量 foreach(@_) {#@_存储参数,这里是引用的另一个作用,如果没有引用,穿进来的的多个数组或者hash都被转换成了数组,悲剧。 $sum+=$_; } $sum;#最后一句的执行值就是返回值 #return $sum;也可以 } print testfunc(1,3) 闭包 sub return_bibao { my ($num1); $num1=10; return sub { print $num1; $num1++; }; } $bibao1=return_bibao(); &$bibao1();#10 &$bibao1();#11 &$bibao1();#12 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |