使用密钥@array而不是0 .. $#array有什么好处吗?

Zai*_*aid 6 perl

我很惊讶地发现该keys函数很适合数组:

keys HASH
keys ARRAY
keys EXPR
Run Code Online (Sandbox Code Playgroud)

返回一个列表,该列表由命名散列的所有键或数组的索引组成.(在标量上下文中,返回键或索引的数量.)

使用keys @array而不是0 .. $#array关于内存使用,速度等有什么好处,或者这个功能更多是历史起源的原因?

看到这keys @array有待$[修改,我猜它是历史性的:

$ perl -Mstrict -wE 'local $[=4; my @array="a".."z"; say join ",", keys @array;'
Use of assignment to $[ is deprecated at -e line 1.
4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29
Run Code Online (Sandbox Code Playgroud)

Mar*_*ark 3

您提供的链接实际上有一个您可能使用/不使用的重要原因keys

作为副作用,调用keys()会重置HASH或ARRAY的内部迭代器(请参阅每个)。特别是,在 void 上下文中调用 keys() 会重置迭代器,而不会产生其他开销。

这将导致each重置到数组的开头。如果数组本身支持稀疏数组作为真正的数据类型,那么使用数组keys和与数组一起使用可能会很重要。each

话虽如此,由于 Perl 中有如此多的数组感知语言结构,例如foreachjoin,我不记得上次使用0..$#array.