Он также сообщает синтаксическому анализатору, что O_ACCMODE
не принимает аргумент ни при каких условиях (кроме &O_ACCMODE()
, о котором вам, вероятно, никогда не придется думать).Это заставляет его вести себя так, как будто большинство людей ожидают константу.
В качестве быстрого примера, в:
sub FOO { 1 }
sub BAR { 2 }
print FOO + BAR;
последняя строка разбирается как print FOO(+BAR())
, а значение печатается как 1, потому чтокогда сабвуфер без прототипа вызывается без паренов, он пытается действовать как листоп и смещает термины как можно правее.
In:
sub FOO () { 1 }
sub BAR () { 2 }
print FOO + BAR;
Последняя строка анализируется как print FOO() + BAR()
и напечатанное значение равно 3, потому что прототип ()
сообщает синтаксическому анализатору, что никакие аргументы для FOO
не являются ожидаемыми или действительными.