Perl以不同的方式加入?

I am working on a perl module and looking for an output (string) of the form : a:value1 OR a:value2 OR a:value3 OR ...

value1,value2,value3 ... 在数组中(比如@values)。

I know we could use join( ' OR ', @values ) to create a concatenated string of the form: value1 OR value2 OR value3 OR ...

但正如你在上面看到的,我需要一个额外的 a:作为每个值的前缀。

什么将是一个干净的方式来做到这一点?

4
额外 编辑
意见: 1

1 答案

您通常使用地图进行以下操作:

#!/usr/bin/env perl
use strict;
use warnings;

my @array = qw(value1 value2 value3);
print join(" OR ", map "a:$_", @array),"\n";

输出:

a:value1 OR a:value2 OR a:value3

map is a simple looping construct, which is useful when you want to do apply some simple logic to every element of a list without making too much clutter of your code.

5
额外
@Borodin:循环构造更多的是描述 map 所做的比正式定义更简洁的方式。如果你可以推荐另一个术语,我很乐意更新答案。
额外 作者 flesk,
完美的作品!
额外 作者 Saket,
虽然 map 可以在内部实现为循环,但它的目的是提供一个映射或函数,通过将所有根据相同的规则列表的元素。把它想象成一个循环结构没有用。
额外 作者 Borodin,
你说“把它想象成一个循环结构是没有用的。”在解释它之后(“改变所有元素”)。 (应该是“每个”,而不是“全部”,你知道,像“为每个”,但它是“映射每个”在这里。)
额外 作者 ikegami,
如果将状态从一个迭代转移到另一个迭代,将其视为循环是有用的,特别是如果最终结果取决于执行顺序。
额外 作者 reinierpost,