2013-03-07 75 views
-4

我有以下几点:数组:的foreach

my $v = "value"; 
my $v1 = "value"; 
my @v2 = ("v3", v4"); 

怎样才可以有一个foreach将包含,V v1和要素V2是这样的:?

foreach my $element ($v, $v1, @v2) { 
# Do something with the element. 
} 

基本上我希望它要的

foreach my $element ($v, $v1, $v3, $v4) { 

} 
+2

你试过了吗?当我执行'perl -e'@v =(4,5,6); foreach my $ i(1,2,3,@ v){printf(“%d”,$ i)}''我得到'1 2 3 4 5 6'作为我的输出,如预期的那样。 – 2013-03-07 03:47:23

+1

该代码中的任何地方都没有'$ v3'或'$ v4'。你的意思是'$ v2 [0]'和'$ v2 [1]'? – ikegami 2013-03-07 04:05:25

+0

@ikegami,我认为他的意思是“v3”和“v4” - 因为数组v2的值没有完全引用,意味着数组v2的元素只是:(“v3”,“v4”)。这就是我的方式 - 但是,我可能是错的。 – jrd1 2013-03-07 04:09:10

回答

1
foreach my $element ($v, $v1, @v2) { ... } 

等效相当于

foreach my $element ($v, $v1, $v2[0], $v2[1], ..., $v2[$#v2]) { ... } 

这似乎正是你想要它做的。

0

你的问题是有点不清楚,但是 - 如果你的意思是:我有一个foreach将包含,V v1和v2的元素,那么这就是你会做什么(在你的符号):

my $v = "value1"; 
my $v1 = "value2"; 
my @v2 = ("v3", "v4"); 

foreach my $element($v, $v1, @v2) { 
    print $element . "\n"; 
} 

这会给你的输出:

value1 
value2 
v3 
v4 

这是如何工作的? foreach循环迭代值的列表由控制变量(VAR)设定为列表中的每个连续的元件:

foreach VAR (LIST) { 
    ... 
} 

在你的情况下,控制变量名是$元件,并且列表和值是:($ v,$ V1,@ V2) - 或者,更明确( “值1”, “值2”, “@ V2 [0]”,“@ V2 [1] “) - 可以被认为是 - (但不是真的)如下:(”value1“,”value2“,”v3“,”v4“)

而且,根据ikegami的警告,FYI:如果您修改循环中的$ element值,列表中的值将被修改。

+0

与我的$元素(“value1”,“value2”,“v3”,“v4”)'不太一样。考虑当你改变'$ element'的值时会发生什么。 – ikegami 2013-03-07 04:06:49

+0

@ikegami,同意 - 但是,如果他想修改数值,那么这就是IMO的另一个答案。 – jrd1 2013-03-07 04:16:16

+0

我没有任何警告。我只是说你声称的两件事情是相当的。 – ikegami 2013-03-07 04:41:42