Dear monks,
Just a short meditation to alert you to the evils that lurk in POSIX constants. For example
No difference between printing CHAR_MAX and CHAR_MAX + 1! A quick consultation with MO=Deparse provides the necessary insight:% perl -MPOSIX=CHAR_MAX -wle 'print( CHAR_MAX )' 127 % perl -MPOSIX=CHAR_MAX -wle 'print( CHAR_MAX + 1 )' 127
But check this out:% perl -MPOSIX=CHAR_MAX -MO=Deparse,-p -e 'print( CHAR_MAX + 1 )' print(CHAR_MAX(1)); -e syntax OK
It appears that rolling one's own CHAR_MAX with constant produces a more civilized item than POSIX::CHAR_MAX.% perl -Mconstant=CHAR_MAX,127 -wle 'print( CHAR_MAX + 1 )' 128 % perl -Mconstant=CHAR_MAX,127 -wle 'print( CHAR_MAX( 1 ) )' Too many arguments for main::CHAR_MAX at -e line 1, at end of line Execution of -e aborted due to compilation errors.
I haven't delved into the POSIX module to get to the bottom of this but we can conclude that, although POSIX constants are subs, they don't behave as nicely as those produced with the constant pragma. They can bite, so watch out.
Thanks to tye for the words o' wisdom.
the lowliest monk
In reply to Beware of POSIX constants by tlm
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |