3

所以,这就是交易。我有一个数组,我们称之为

@array = ('string1','string2','string3','string4');

等等,等等。我无法知道数组有多大或内容是什么,具体来说,除了它是一个字符串数组。

我还有一个变量,需要根据数组的大小和内容进行更改。

这是该变量的简单赋值示例,以及生成赋值的数组:

@array = ('string1','string2','string3');

$var = Some::Obj1(Some::Obj2('string1'),
                 Some::Obj2('string2'), 
                 Some::Obj2('string3'));

然后,例如,如果我有以下@array,

@array = ('string1','string2','string3','string4','string5');

我的作业需要如下所示:

$var = Some::Obj1(Some::Obj2('string1'),
                 Some::Obj2('string2'), 
                 Some::Obj2('string3'), 
                 Some::Obj2('string4'), 
                 Some::Obj2('string5'));

你们能想到任何方式可以实现这样的事情吗?

4

2 回答 2

10

好吧,如果您只需要将一些字符串转换为对象内的对象列表……为什么不映射呢?

my @array = ('string1','string2','string3','string4','string5');
my $var = Some::Obj1(map { Some::Obj2($_) } @array);
于 2013-06-07T21:43:10.870 回答
1

是的,你只是这样做

$var = Some::Obj1(map(Some::Obj2($_), @array));

这会产生与您编写的代码完全相同的结果:

$var = Some::Obj1(Some::Obj2('string1'),
             Some::Obj2('string2'), 
             Some::Obj2('string3'), 
             Some::Obj2('string4'), 
             Some::Obj2('string5'));

当然,如果你是第一次初始化变量,不用说你应该适当地使用变量my或变量之前。our如果您希望使用 执行更复杂的操作map,可以将整个代码块括在大括号中并省略逗号,即

map {operation 1; operation 2; ...; final operation stored as result;} @array
于 2013-06-07T21:44:48.697 回答