列表重复运算符(xx
)会在每次重复列表时对其进行评估。例如,
my @input = get() xx 5;
将评估为STDIN的前5行。有什么方法可以让我只重复元素的 value 5次,而不是每次都进行评估?目前,我一直在将其分配给一个变量,然后重复该过程,但那样看来有点麻烦。
my $firstLine = get();
my @firstlineRepeated = $firstLine xx 5;
是否存在前缀或可以让我在一条语句中使用的内容?
答案 0 :(得分:14)
使用given
将其上下文关联到$_
是一种相当简洁的方法:
my @input = ($_ xx 5 given get());
say @input;
当我键入hello
时,会给出:
[hello hello hello hello hello]
由于given
只是上下文化,而不是进行任何类型的定义或真实性测试,因此作为一般模式比andthen
更加安全。
答案 1 :(得分:7)
您可以尝试使用andthen
运算符:
my @input = (get() andthen $_ xx 5);
从文档中:
andthen
运算符在遇到第一个运算符时返回空 未定义的参数,否则为最后一个参数。最后一个论据是 照原样返回,根本不检查其定义性。 短路。左侧的结果绑定到$_
右侧,如果右侧是Callable,则作为参数传递, 计数必须为0或1。
答案 2 :(得分:2)
使用词组ENTER
也可以
my @input = ENTER { get() } xx 5;