为什么';我是否继续执行Perl 5.10中的下一个when块?
当我运行此命令时:为什么';我是否继续执行Perl 5.10中的下一个when块?,perl,switch-statement,continue,Perl,Switch Statement,Continue,当我运行此命令时: use feature ':5.10'; $x=1; given ($x) { when(1) { say '1'; $x = 2; continue; } when (2) { say '2'; } } 这应该同时打印1和2,但只打印1。我错过什么了吗 编辑: 我添加了$x=2,但它仍然只打印“1”我认为您可能误解了continue的目的或交换机构造中故障的性质 当块以隐式中断
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
$x = 2;
continue;
}
when (2) {
say '2';
}
}
这应该同时打印1和2,但只打印1。我错过什么了吗
编辑:
我添加了$x=2,但它仍然只打印“1”我认为您可能误解了
continue
的目的或交换机构造中故障的性质
当块以隐式中断结束时,每个,因此在成功匹配后退出给定的。所有continue
所做的就是告诉给定的块在出现条件时继续处理,而不中断。它不会强制下一个条件(当它不是时)神奇地变为真
考虑这个,它会输出两次
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
continue;
}
when ( /1/ ) {
say '1 again';
}
}
请参见手册页:
给定(EXPR)将EXPR的值赋值给块词法范围内的$
该代码输出1和2:
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
$_ = 2;
continue;
}
when (2) {
say '2';
}
}
由于给定的不是循环构造(尽管它支持continue,这在该实例中是特例),因此请使用foreach或类似用法:
use feature ':5.10';
$x=1;
for ($x) {
when(1) {
say '1';
$x = 2;
continue;
}
when (2) {
say '2';
}
}
for(expression)将$设置为表达式,在某些情况下,在给定/何时之前,该行为用于模拟开关。为什么希望它输出2<代码>$x
为1。请参阅我的编辑。。。仍然不工作该选项将不工作,因为给定的将$x
复制到$\u
,这是智能匹配的参数。如果您在第一个中设置$\u2
,当
时,它将起作用。FWIW,我展示了学习Perl第五版中的一个扩展示例,它解决了这个问题。:)此外,对于在家玩的任何人,请使用5.10.1。智能匹配在5.10.0中被破坏。我认为我误解的根源是C,在“开关”中的fall through没有做任何额外的测试。。。它只是通过并执行下一个块。