You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl6中如何用单行代码实现Perl5多范围一维数组效果?

解决Perl 6中拼接范围生成一维数组的问题

嘿,我完全懂你的困惑!Perl 6里Range的行为和Perl 5确实不一样——你直接用逗号把两个范围丢进数组,Perl 6会把每个Range当成一个独立的数组元素,结果自然就变成二维数组了。不用append的话,有两种简洁的单行写法能实现Perl 5的效果:

方法1:用展开操作符|

my @cols = |(3..9), |(11..16);
use Data::Printer:from<Perl5>; p @cols;

|操作符的作用就是把Range里的元素逐个“展开”到数组中,而不是把整个Range作为单个元素存进去,这样就得到了一维的元素列表。

方法2:用flat函数扁平化结构

my @cols = flat 3..9, 11..16;
use Data::Printer:from<Perl5>; p @cols;

flat是Perl 6专门用来扁平化嵌套结构的函数,它会自动把传入的多个Range展开成一维的元素集合,写法更直观易懂。

为什么Perl 5和Perl 6有差异?

简单说,Perl 5里的Range在列表上下文会自动展开成元素;但Perl 6里的Range是一个独立的对象,只有当你明确告诉它要展开(比如用|或者flat)时,才会把内部元素逐个拿出来。

内容的提问来源于stack exchange,提问作者con

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:35:48