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

perl – 更常用的数据结构引用

发布时间:2020-12-16 06:25:51 所属栏目:大数据 来源:网络整理
导读:我一直在阅读一些perl513 * delta文件,我看到了Perl 5.14的一些新功能.从Perl 5.13.7开始,许多数组/哈希函数都可以工作 on array/hash refs as well.虽然这可能主要被视为语法糖,或Perl正在做你期望的事情,我想,这/是否应该改变在Perl中声明数据结构的范式?
我一直在阅读一些perl513 * delta文件,我看到了Perl 5.14的一些新功能.从Perl 5.13.7开始,许多数组/哈希函数都可以工作 on array/hash refs as well.虽然这可能主要被视为语法糖,或Perl正在做你期望的事情,我想,这/是否应该改变在Perl中声明数据结构的范式?众所周知,它破坏了与预告片Perl的兼容性,主要使用匿名结构的争论是什么?

例如:

#!/usr/bin/env perl

use strict;
use warnings;

use 5.13.7;

my $hashref = {
  english => 'hello',spanish => 'hola',french => 'bon jour'
};

foreach my $greeting (keys $hashref) {
  say $hashref->{$greeting}; #use say since we need a later version anyway
}

而不是使用命名散列(%hash)的更传统方式.

附:如果看到这是增强的,我可以改为CW,但我很想听到一些观点.

解决方法

在引用上使用某些数组和散列函数的能力只是语法糖,不需要影响你使用第一级复数结构的方式.有几个原因:

鉴于我的$array = [1 … 10]

>列表处理函数,如map,grep,sort,reverse,print,say,printf等等,仍然需要传递正确的列表,所以这意味着使用@ $array与更简单的@array这些函数.
> for / foreach循环需要传递一个列表,需要@ $数组
> $array始终为true,以确定编写@ $array所需的长度

while ($array)  { infinite loop }
while (@$array) { what you probably wanted }
while (@array)  { no room for error here }

>将一个真正的@array子脚本化为$array [$idx]比$array-> [$idx]稍微快一些(~15%),因为每次访问都不需要取消引用.由于散列函数的开销,与散列的差异较小,约为3%.

基本上,通过转移到所有引用,您将获得需要使用解除引用标记的不同功能集.相反,利用pre v5.13.7功能来宣告即时使用我的@array;我的%哈希;并在您将使用过多的@ {…}或%{…}结构与适用函数的区域中使用新的语法快捷方式.

(编辑:李大同)

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

    推荐文章
      热点阅读