我一直在阅读一些perl513*delta文件,我看到了Perl 5.14的一些新功能.从Perl 5.13.7开始,许多数组/散列函数也适用于数组/散列引用.虽然这可能主要被视为语法糖,或者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
}
Run Code Online (Sandbox Code Playgroud)
而不是使用命名hash(%hash)的更传统的方式.
PS如果看到它是增强的我可以改为CW,但我很想听到一些观点.
在引用上使用某些数组和散列函数的能力只是语法糖,不会影响您使用第一级复数结构的方式。有几个原因:
给定my $array = [1 .. 10]
列表处理函数,如map、grep、sort、reverse、print、say和printf许多其他函数仍然需要传递适当的列表,因此这意味着使用@$arrayvs 这些函数更简单@array。
循环for/foreach需要传递一个列表,要求@$array
$array始终为真,以确定您需要写入的长度@$array
while ($array) { infinite loop }
while (@$array) { what you probably wanted }
while (@array) { no room for error here }
Run Code Online (Sandbox Code Playgroud)下标一个真实的@arrayas比在每次访问时不需要进行取消引用$array[$idx]要快一些(约 15%) 。$array->[$idx]由于散列函数的开销,与散列的差异较小,约为 3%。
基本上,通过移动到所有引用,您将获得一组需要使用取消引用符号的不同功能。相反,充分利用v5.13.7您声明立即使用的任何内容的预功能,并在您可能使用过多或使用适用函数构造my @array; my %hash;的区域中利用新的语法快捷方式。@{ ... }%{ ... }
| 归档时间: |
|
| 查看次数: |
136 次 |
| 最近记录: |