Constants created by use constant are actually functions, or at least act like them.
The parens aren't needed in the code you gave, but they don't harm anything either.
>perl -MO=Concise -e"use constant BUFFER => 20; if (BUFFER() != 20) {}
+"
3 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 72 -e:1) v ->3
- <0> ex-const v/4 ->3
-e syntax OK
>perl -MO=Concise -e"use constant BUFFER => 20; if (BUFFER != 20) {}"
3 <@> leave[1 ref] vKP/REFC ->(end)
1 <0> enter ->2
2 <;> nextstate(main 72 -e:1) v ->3
- <0> ex-const v/4 ->3
-e syntax OK
They do help in other circumstances, though. If a bareword is expected, then the constant will be treated as a bareword instead of as a constant. EXPR => might be the only problem.
>perl -le"use constant FOO => 'abc'; print %{{ FOO => 'def' }};"
FOOdef
>perl -le"use constant FOO => 'abc'; print %{{ FOO() => 'def' }};"
abcdef
Update: Interestingly, neither $hash{EXPR} and sub(*)->{EXPR} treat the constant as a bareword. EXPR => might be the only case where it's an issue.
|