Sets the umask for the process to EXPR and returns the previous value. If EXPR is omitted, merely returns the current umask.
The Unix permission
rwxr-x--- is represented as three sets of three bits, or three octal digits:
0750 (the leading 0 indicates octal and isn't one of the digits). The
umask value is such a number representing disabled permissions bits. The permission (or "mode") values you pass
sysopen are modified by your umask, so even if you tell
sysopen to create a file with permissions
0777 , if your umask is
0022 , then the file will actually be created with permissions
0755 . If your
0027 (group can't write; others can't read, write, or execute), then passing
0666 would create a file with mode
0666 &~ 027 is
Here's some advice: supply a creation mode of
0666 for regular files (in
sysopen) and one of
0777 for directories (in
mkdir) and executable files. This gives users the freedom of choice: if they want protected files, they might choose process umasks of
027 , or even the particularly antisocial mask of
077 . Programs should rarely if ever make policy decisions better left to the user. The exception to this is when writing files that should be kept private: mail files, web browser cookies, .rhosts files, and so on.
If umask(2) is not implemented on your system and you are trying to restrict access for yourself (i.e.,
(EXPR & 0700) > 0 ), raises an exception. If umask(2) is not implemented and you are not trying to restrict access for yourself, returns
Remember that a umask is a number, usually given in octal; it is not a string of octal digits. See also oct, if all you have is a string.
Portability issues: umask in perlport.
© 1993–2016 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.