Perl 数组:Foreach
我有以下资料:Perl 数组:Foreach,perl,Perl,我有以下资料: my $v = "value"; my $v1 = "value"; my @v2 = ("v3", v4"); 我如何拥有一个包含、v、v1和v2元素的foreach?类似于: foreach my $element ($v, $v1, @v2) { # Do something with the element. } 本质上,我希望它与 foreach my $element ($v, $v1, $v3, $v4) { } 相当于 foreach my $elem
my $v = "value";
my $v1 = "value";
my @v2 = ("v3", v4");
我如何拥有一个包含、v、v1和v2元素的foreach?类似于:
foreach my $element ($v, $v1, @v2) {
# Do something with the element.
}
本质上,我希望它与
foreach my $element ($v, $v1, $v3, $v4) {
}
相当于
foreach my $element ($v, $v1, $v2[0], $v2[1], ..., $v2[$#v2]) { ... }
这似乎正是您想要它做的。但是,您的问题有点不清楚-如果您的意思是:我有一个foreach,它将包含v、v1和v2的元素,那么这就是您要做的(用您的符号): 这将为您提供以下输出:
value1
value2
v3
v4
这是怎么回事foreach循环通过将控制变量(VAR)设置为列表中的每个连续元素来迭代值列表:
foreach VAR (LIST) {
...
}
在您的例子中,控制变量名是$element,列表及其值是:($v,$v1,@v2),或者更明确地说:(“value1”,“value2”,“@v2[0]”,“@v2[1]”),可以认为是-(但实际上不是)以下内容:(“value1”,“value2”,“v3”,“v4”)
并且,根据ikegami的警告,仅供参考:如果您修改循环中的$element值,列表中的值将依次被修改。您尝试过吗?当我执行perl-e'@v=(4,5,6)时;对于每个$i(1,2,3,@v){printf(“%d”,$i)}我得到了
123456
作为我的输出,正如预期的那样。该代码中没有$v3
或$v4
。你的意思是$v2[0]
和$v2[1]
?@ikegami,我认为他的意思是“v3”和“v4”-因为数组v2的值没有完全引用转义,这意味着数组v2的元素只是:(“v3”,“v4”)。我就是这么认为的——但是,我可能错了。@jrd,我很确定他指的是@v2
,而不是“v3”
和“v4”
@ikegami,正确——根据第一个代码示例中v2的定义——其中包含“v3”和“v4”。与我的$element(“value1”、“value2”、“v3”、“v4”)的不太一样。考虑一下当你改变代码的值时,会发生什么?$元素< /代码>。@ IKGAMI,同意,但是,如果他想修改这些值,那么这是另一个答案,IMO.,我没有警告任何东西。我只是说你所说的两件事并不完全相同。@ikegami,好吧。这是关于我的$element…
的与我的$element…
的的对比吗?如果是这样,则根据标准,它们是等效的。如果不是,您指的是什么?$v、$v1、@v2
vs“value1”、“value2”、“v3”、“v4”
value1
value2
v3
v4
foreach VAR (LIST) {
...
}