2013-03-07 82 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