解决方法
$ perl -MO=Deparse -e 'while () { }' while (1) { (); } -e Syntax OK
看来while(){}和while(1){}是等价的。还要注意,空的括号*被插入空块。
预定义编译器行为的另一个示例:
$ perl -MO=Deparse -e 'while (<>) { }' while (defined($_ = <ARGV>)) { (); } -e Syntax OK
我会说,这只是文档不报告一个特殊情况。
* – 确切地说,插入存根操作码。它什么都不做,但服务goto目标为enterloop操作码。没有真正的理由注意到这一点。 Deparse表示使用空括号的这个存根操作,因为括号不生成代码。