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 mkdir or
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
umask were 0027
(group can't write; others can't
read, write, or execute), then passing
sysopen 0666
would create a
file with mode 0640
(because 0666 &~ 027
is 0640
).
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 022
, 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
undef.
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.