当我运行时:
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”
答案 0 :(得分:9)
请参阅perlsyn手册页:
给定(EXPR)将在块的词法范围内将EXPR的值赋给$ _
此代码输出1和2:
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
$_ = 2;
continue;
}
when (2) {
say '2';
}
}
答案 1 :(得分:4)
我认为你可能误解了continue
的目的或者转换构造中的堕落性质。
每个when
块都以隐式中断结束,因此成功匹配时会退出given
。所有continue
都会告诉given
块继续处理when
条件而不会中断。当它不是时,它不会强制下一个when
条件神奇地成为真实。
考虑一下,做输出两次。
use feature ':5.10';
$x=1;
given ($x) {
when(1) {
say '1';
continue;
}
when ( /1/ ) {
say '1 again';
}
}
答案 2 :(得分:0)
由于给定的不是循环结构(尽管它支持continue,在该实例中是特殊的),使用foreach或类似的结果:
use feature ':5.10';
$x=1;
for ($x) {
when(1) {
say '1';
$x = 2;
continue;
}
when (2) {
say '2';
}
}
for(expression)将$ _设置为表达式,并且在某些情况下,在给定/何时使用该行为来模拟switch。