Current Perl documentation can be found at perldoc.perl.org.
Here is our local, out-dated (pre-5.6) version:
Perl only understands octal and hex numbers as such when they occur as literals in your program. If they are read in from somewhere and assigned, no automatic conversion takes place. You must explicitly use
hex() if you want the values converted.
oct() interprets both hex (``0x350'') numbers and octal ones (``0350'' or even without the leading ``0'', like ``377''), while
hex() only converts hexadecimal ones, with or without a leading ``0x'', like ``0x255'',
``3A'', ``ff'', or ``deadbeef''.
This problem shows up most often when people try using
sysopen(), which all want permissions in octal.
chmod(644, $file); # WRONG -- perl -w catches this chmod(0644, $file); # right