use List::Gen qw/by/;
for my $items (by 3 => @list) {
# do something with @$items which will contain 3 element slices of @list
# unlike natatime or other common solutions, the elements in @$items are
# aliased to @list, just like in a normal foreach loop
}
您还可以导入mapn函数,List::Gen使用该函数来实现by:
use List::Gen qw/mapn/;
mapn {
# do something with the slices in @_
} 3 => @list;
6条答案
按热度按时间piwo6bdm1#
我在CPAN的模块List::Gen中解决了这个问题。
您还可以导入
mapn
函数,List::Gen
使用该函数来实现by
:xdnvmnnf2#
您可以使用List::MoreUtils::natatime。从文档:
natatime
是用XS实现的,所以为了提高效率,你应该更喜欢它。为了说明起见,下面是一个用Perl实现三元素迭代器生成器的方法:ergxz8rk3#
这输出:
w7t8yxp54#
产生:
d7v8vwbk5#
不容易。最好将
@d
设为三元素元组数组,方法是将元素作为数组引用推入数组:(除了你真的应该使用CPAN的CSV模块之一。
dtcbnfnu6#
从Perl v5.36开始,您可以完全做到这一点:
它是作为
for_list
实验特性实现的,因此您可以像使用use experimental qw(for_list)
时那样忽略警告;对于v5.36之前的版本,我们将依赖于上面提到的
while/splice
。