我需要使用List::Gen
中的函数cartesian
。这个函数需要LIST作为第二个参数,但我有一个数组,比如
$VAR1 = [
[
1,
2,
3
],
[
'a',
'b',
'c'
],
[
'x'
]
];
如何将此类数组“转换”为列表,以便可以使用cartesian
?在这种情况下,将数组放入列表上下文似乎不起作用。
答案 0 :(得分:6)
Parens不会创建列表,只会更改优先级。
@a = ((1, 2, 3), (7, 8, 9));
与
相同@a = (1, 2, 3, 7, 8, 9);
cartesian
的示例显示了对数组的引用列表
cartesian { $_[0] . $_[1] } [1,2,3], [7,8,9];
所以看起来你想要创建一个包含两个元素的数组,每个元素都引用另一个数组。
@a = ( [1,2,3], [7,8,9] );
然后,为了回答您的问题,在列表上下文中评估@a
将返回这两个引用。
cartesian { $_[0] . $_[1] } @a;
答案 1 :(得分:0)
在你的新问题中,你有
$VAR1 = [
[
1,
2,
3
],
[
'a',
'b',
'c'
],
[
'x'
]
];
尽管您声称它不起作用,但您只需要在列表上下文中评估数组。
cartesian { ... } @$VAR1;
例如,
( cartesian { join '|', @_ } @$VAR1 )->say;
给出
1|a|x 1|b|x 1|c|x 2|a|x 2|b|x 2|c|x 3|a|x 3|b|x 3|c|x