perl 将hash的键列表赋值给数组_深入理解Perl的变量

Perl变量是一个引用

对于下面的变量赋值代码,这表示将内存中的字符串数据"junmajinlong"保存到变量name中去。

my $name = "junmajinlong";

注意,「这里的变量名是name,而不是,前缀符号具有特殊意义」。不仅如此,数组变量的前缀@、hash变量的前缀%也一样如此。这些前缀的意义将在后文详细解释。

# 下面两个变量的变量名分别为names和person,而不是@names、%person
my @names = ("junmajinlong", "gaoxiaofang", "fairy");
my %person = (name => "junmajinlong", age => 23, );

「Perl变量完全使用引用的方式去存储数据」。这意味着,对于上面的name变量,它保存的是指向字符串数据"junmajinlong"的引用,而不是直接保存该字符串,或者干脆说变量name就是一个指向字符串数据的引用。

严格来说,perl会在堆内存中存放好字符串数据"junmajinlong",然后将该内存空间的地址保存在栈中某个位置,变量name就是这个栈中数据。

如下图所示:

c8bc3bfd35c28d2a0c215efd34f3f717.png

Perl允许原地修改内存数据

「Perl允许原地修改内存数据」。这意味着修改变量的数据或为变量重新赋值时,修改后的数据或新数据直接保存在原内存中,变量保存在栈中的引用地址不会发生改变,也即它所指向的内存仍然是原来的内存。

但注意,重新声明同名变量时,会创建新的变量并掩盖(mask)原有的同名变量,它们的内存地址是不一样的。

如图:

b5f212ecf3b4e030d2fb8c6dcef976ee.png

在Perl中,「可以在某个变量前加上反斜线来获取该变量所保存实际数据的内存地址」,例如\$name将获取变量name所保存堆内存数据的地址。

my $name = "junmajinlong&#
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值