Perl Programming Documentation
Download Perl
Explore

Manual

- Overview
- Tutorials
- FAQs
- History / Changes
- License

Reference

- Language
- Functions
- Operators
- Special Variables
- Pragmas
- Utilities
- Internals
- Platform Specific

Modules

- A • B • C • D • E
- F • G • H • I • L
- M • N • O • P • S
- T • U • X

Tools

- Preferences

# umask

Perl 5 version 26.0 documentation
Go to top
Show recent pages
Recently read

# umask

Perl functions A-Z | Perl functions by category | The 'perlfunc' manpage

- umask EXPR

- umask

  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.