Perl不能将last与while语句修饰符一起使用

Perl 可以:

perl -le '$d=1; while(1){ $d/=2 and ++$i or last } print "i=$i"'

但不是:

perl -le '$d=1; $d/=2 and ++$i or last while 1; print "i=$i"'

这导致:

Can't "last" outside a loop block at -e line 1.

这是一般情况还是此特定语句中的某些内容阻止了last此处?没有perl的使用能够做到last语句修饰(while/ until/for在早期版本在结束)?我现在在 v5.26 上进行了测试,并且没有现成的旧版本。

回答

并非所有语句修饰符。

$ perl -M5.010 -e'last while 1; say "ok"'
Can't "last" outside a loop block at -e line 1.

$ perl -M5.010 -e'last until 0; say "ok"'
Can't "last" outside a loop block at -e line 1.

$ perl -M5.010 -e'last for 1; say "ok"'
ok

众所周知,它在特殊情况下do BLOCK while EXPR;也不起作用。

$ perl -M5.010 -e'do { last } while 1; say "ok"'
Can't "last" outside a loop block at -e line 1.

我不知道为什么它适用于for而不是其他人。


不是新的。

$ for v in 10 12 14 16 18 20 22 24 26 28 30 32; do
   printf '5.%s:n' $v
   5.${v}t/bin/perl -M5.010 -e'last while 1; say "ok"'
done
5.10:
Can't "last" outside a loop block at -e line 1.
5.12:
Can't "last" outside a loop block at -e line 1.
5.14:
Can't "last" outside a loop block at -e line 1.
5.16:
Can't "last" outside a loop block at -e line 1.
5.18:
Can't "last" outside a loop block at -e line 1.
5.20:
Can't "last" outside a loop block at -e line 1.
5.22:
Can't "last" outside a loop block at -e line 1.
5.24:
Can't "last" outside a loop block at -e line 1.
5.26:
Can't "last" outside a loop block at -e line 1.
5.28:
Can't "last" outside a loop block at -e line 1.
5.30:
Can't "last" outside a loop block at -e line 1.
5.32:
Can't "last" outside a loop block at -e line 1.


以上是Perl不能将last与while语句修饰符一起使用的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>