in reply to use constant with parentheses
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.
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: use constant with parentheses
by parv (Parson) on Jun 24, 2008 at 05:49 UTC | |
by ikegami (Patriarch) on Jun 24, 2008 at 05:58 UTC | |
by parv (Parson) on Jun 24, 2008 at 11:26 UTC |