所以,这是交易。我有一个数组,我们称之为
@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'));
你能想到任何方式可以实现这样的事情吗?
答案 0 :(得分:10)
好吧,如果您只需要将一些字符串转换为对象内的对象列表...为什么不映射?
my @array = ('string1','string2','string3','string4','string5');
my $var = Some::Obj1(map { Some::Obj2($_) } @array);
答案 1 :(得分: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