当前位置:  开发笔记 > 编程语言 > 正文

迭代哈希引用是否需要在perl中隐式复制它?

如何解决《迭代哈希引用是否需要在perl中隐式复制它?》经验,为你挑选了1个好方法。



1> Grant McLean..:

不,您引用的语法不会创建副本.

这个表达式:

%{$hash_ref}

完全等同于:

%$hash_ref

并且假设$hash_ref标量变量确实包含对散列的引用,那么%在前面添加简单地"解除引用"引用 - 即它解析为表示底层散列($hash_ref指向的东西)的值.

如果查看每个函数的文档,您会看到它希望将哈希作为参数.把%你的东西放在hashref上是如何提供哈希的.

如果您编写了自己的子例程并将哈希传递给它,就像这样:

my_sub(%$hash_ref);

然后在某种程度上你可以说哈希被"复制"了,因为在子程序中,特殊@_数组将包含来自哈希的所有键/值对的列表.但即使在这种情况下,@ _的元素实际上是键和值的别名.如果您执行以下操作,您实际上只能获得一份副本:my @args = @_.

Perl的内置each函数使用原型'+'声明,它有效地将哈希(或数组)参数强制转换为对底层数据结构的引用.

另外,从版本5.14开始,该each函数也可以引用哈希.所以代替:

($key, $value) = each(%{$hash_ref})

你可以简单地说:

($key, $value) = each($hash_ref)


@Hambone`每个$ ref`在5.14中作为*实验*特征引入,但稍后修订或删除.从5.24开始它*将被删除,因为它变得非常麻烦.取而代之的是"postderef"功能,在5.20中作为实验引入,并且在5.24中将升级为非实验性(在语法或行为上没有变化).
推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有