是否可以根据数组的大小动态扩展标量赋值?

时间:2013-06-07 21:39:59

标签: perl

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

@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'));

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

2 个答案:

答案 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'));

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

map {operation 1; operation 2; ...; final operation stored as result;} @array