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

    Ah, but try this with The Real Comma ...

    perl -l -e 'use constant FOO => "abc"; print %{{ FOO , "def" }}'

    I happened on it earlier at work where everything was as expected -- in hash (reference) assignment -- when constants were used with "," but displayed ugly head when used with "=>". (Yes, calling the constant "variable" as a sub that it really is worked around the problem.)

    I had managed to put up with constants not properly interpolating in strings. Not any more.

      Normal comma doesn't expect a bareword, thus no problem.

        Yes, that thought occurred (but somehow missed to note) to me after switching back & forth 2-3 times. In hash reference assignment, I preferred to use "=>" and "constant" sub call instead of using bareword with ",".

        At least now I can genuinely start my own list of things that I do not like about Perl.