我在perl中有一个n个元素的数组。我需要通过将所有元素与所有布尔运算符(例如AND,OR,NOT)连接来创建所有可能的字符串。例如,如果
@arr = ('X', 'Y', 'Z');
我需要输出如下
X和Y和Z
X和Y或Z
X OR Y OR Z. ..... ....
答案 0 :(得分:2)
你想要
for (qw( AND OR )) {
for (qw( AND OR )) {
...
}
}
其中嵌套数与@arr
中的元素数成比例。如果需要任意数量的嵌套循环,则需要NestedLoops
。
use Algorithm::Loops qw( NestedLoops MapCar );
my $ops = [qw( AND OR )];
my $iter = NestedLoops([ ($ops) x $#arr ]);
while (my @ops = $iter->()) {
say join ' ', MapCar { @_ } \@arr, \@ops;
}
您也可以将其写为
use Algorithm::Loops qw( NestedLoops );
my $ops = [qw( AND OR )];
my @loops = map { [ $_ ], $ops } @arr;
pop(@loops);
my $iter = NestedLoops(\@loops);
while (my @expr = $iter->()) {
say join ' ', @expr;
}