加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读