use strict;
use warnings;
my @content1=("sunTerio", "builds123", "build123_sunTerio", "glorai", "2131flow" , "build434_glorai");
my $tryVar;
&tty;
sub tty {
foreach my $we (7..9) {
$tryVar=1;
LABEL34: #### Line 12
foreach my $i (@content1) {
if (grep ((/sunTerio/i || /glorai/i), $i)) { #### Line 14
print "-----$i-----\n";
}
}
if ($tryVar) {
foreach my $r (1..5) {
if ($r == 2 ) {
$tryVar=0;
goto LABEL34;
}
}
}
}
}
以上是代码片段。在这里,当我在“LABEL 34”所在的位置(第12行)使用“LABEL 34”时,它不会导致任何问题。但当我在“第14行”使用“LABEL 34”时,它会导致出现(警告+错误)消息的问题:
不赞成在www.example.com行使用“后藤”跳转到构造pl.pl。不能在pl.pl第14行“goto”跳转到foreach循环的中间。
为什么当我在第14行使用LABEL 34时,只有问题出现;而不是当LABEL 34位于当前位置(第12行)时,尽管这两种情况都在foreach循环下?
谢谢你!
1条答案
按热度按时间hc2pp10m1#
我们讨论的foreach循环如下:
从foreach循环的外部跳到它的主体没有任何意义。
这在逻辑上是没有意义的。foreach循环体是为列表中的每一项执行的。这个循环体将在没有项的情况下执行。
实际上,这是没有意义的。它将跳过
@content1
的求值和$i
的初始化。使用$i
将是未定义的行为。当你到达循环的末尾时,会发生什么?你如何检查你是否已经到达了一个你从未创建过的列表的末尾?这是应该被允许的,而且肯定不是故意的。
我不能建议把标签放在第14行的替代方案,因为你还没有说你想做什么(我通常可以猜到,但这根本没有意义)。