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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Beware of POSIX constants
by merlyn (Sage) on Oct 03, 2005 at 15:46 UTC | |
|
Re: Beware of POSIX constants
by Zaxo (Archbishop) on Oct 03, 2005 at 15:42 UTC | |
|
Re: Beware of POSIX constants
by Perl Mouse (Chaplain) on Oct 03, 2005 at 16:01 UTC | |
by tye (Sage) on Oct 03, 2005 at 16:38 UTC | |
by Anonymous Monk on Oct 03, 2005 at 23:14 UTC | |
by tye (Sage) on Oct 04, 2005 at 02:19 UTC | |
by Perl Mouse (Chaplain) on Oct 04, 2005 at 08:44 UTC | |
|