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,2,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,"second"=>2,"third"=>3);
push(@arr2,\%hash1);#同理 push(@arr2,{"first"=>1,"second"=>2,"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,2,3)

闭包

sub return_bibao {
    my ($num1);
    $num1=10;
    return sub {
    print $num1;
    $num1++;
};
}

$bibao1=return_bibao();
&$bibao1();#10
&$bibao1();#11
&$bibao1();#12








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值