-4

我需要cartesian使用List::Gen. 这个函数需要 LIST 作为第二个参数,但我有一个数组,比如

$VAR1 = [
          [
            1,
            2,
            3
          ],
          [
            'a',
            'b',
            'c'
          ],
          [
            'x'
          ]
        ];

如何将这样的数组“转换”为列表,以便cartesian可以使用?在这种情况下,将数组放入列表上下文似乎不起作用。

4

2 回答 2

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;
于 2013-01-13T20:11:47.180 回答
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
于 2013-01-14T21:09:35.597 回答