It also tells the parser that O_ACCMODE does not accept an argument under any conditions (other than &O_ACCMODE() , which you probably will never have to think about). This makes him act like most people expect constant.
As a quick example, in:
sub FOO { 1 } sub BAR { 2 } print FOO + BAR;
the final line is parsed as print FOO(+BAR()) , and the printed value is 1, because when the prototype sub is called without parsers, it tries to act as listop and slurp members as far as possible.
IN:
sub FOO () { 1 } sub BAR () { 2 } print FOO + BAR;
The last line parses as print FOO() + BAR() , and the printed value is 3, because the prototype () tells the parser that the FOO arguments are not expected or not valid.
hobbs source share