gpt4 book ai didi

perl - 更常使用数据结构引用

转载 作者:行者123 更新时间:2023-12-04 18:51:55 26 4
gpt4 key购买 nike

我一直在阅读一些 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,但我很想听听一些观点。

最佳答案

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

给定 my $array = [1 .. 10]

  • 列表处理函数如 map , grep , sort , reverse , print , say , printf和许多其他人仍然需要传递适当的列表,所以这意味着使用 @$array与更简单的 @array有了这些功能。
  • for/foreach loop 需要传递一个列表,需要 @$array
  • $array始终为真,确定长度需要写@$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%。

  • 基本上,通过移动到所有引用,您将获得一组不同的功能,这些功能需要使用解引用符号。相反,请利用预 v5.13.7您声明立即使用的任何功能的功能 my @array; my %hash;并在您可能会过度使用的领域使用新的语法快捷方式 @{ ... }%{ ... }构造具有适用的功能。

    关于perl - 更常使用数据结构引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4980178/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com