NAME
    File::Util::Tempdir - Cross-platform way to get system-wide & user
    private temporary directory

VERSION
    This document describes version 0.034 of File::Util::Tempdir (from Perl
    distribution File-Util-Tempdir), released on 2018-09-22.

SYNOPSIS
     use File::Util::Tempdir qw(get_tempdir get_user_tempdir);

     my $tmpdir = get_tempdir(); # => e.g. "/tmp"

     my $mytmpdir = get_user_tempdir(); # => e.g. "/run/user/1000", or "/tmp/1000"

DESCRIPTION
FUNCTIONS
    None are exported by default, but they are exportable.

  get_tempdir
    Usage:

     my $dir = get_tempdir();

    A cross-platform way to get system-wide temporary directory.

    On Windows: it first looks for one of these environment variables in
    this order and return the first value that is set: "TMP", "TEMP",
    "TMPDIR", "TEMPDIR". If none are set, will look at these directories in
    this order and return the first value that is set: "C:\TMP", "C:\TEMP".
    If none are set, will die.

    On Unix: it first looks for one of these environment variables in this
    order and return the first value that is set: "TMPDIR", "TEMPDIR",
    "TMP", "TEMP". If none are set, will look at these directories in this
    order and return the first value that is set: "/tmp", "/var/tmp". If
    none are set, will die.

  get_user_tempdir
    Usage:

     my $dir = get_user_tempdir();

    Get user's private temporary directory.

    When you use world-writable temporary directory like /tmp, you usually
    need to create randomly named temporary files, such as those created by
    File::Temp. If you try to create a temporary file with guessable name,
    other users can intercept this and you can either: 1) fail to
    create/write your temporary file; 2) be tricked to read malicious data;
    3) be tricked to write to other location (e.g. via symlink).

    This routine is like "get_tempdir" except: on Unix, it will look for
    "XDG_RUNTIME_DIR" first (which on a Linux system with systemd will have
    value like "/run/user/1000" which points to a RAM-based tmpfs). Also,
    "get_user_tempdir" will first check that the temporary directory is: 1)
    owned by the running user; 2) not group- and world-writable. If not, it
    will create a subdirectory named $EUID ($>) with permission mode 0700
    and return that. If that subdirectory already exists and is not owned by
    the user or is group-/world-writable, will try "$EUID.1" and so on.

    It will die on failure.

HOMEPAGE
    Please visit the project's homepage at
    <https://metacpan.org/release/File-Util-Tempdir>.

SOURCE
    Source repository is at
    <https://github.com/perlancar/perl-File-Util-Tempdir>.

BUGS
    Please report any bugs or feature requests on the bugtracker website
    <https://rt.cpan.org/Public/Dist/Display.html?Name=File-Util-Tempdir>

    When submitting a bug or request, please include a test-file or a patch
    to an existing test-file that illustrates the bug or desired feature.

SEE ALSO
    File::Spec has "tmpdir" function. It also tries to look at environment
    variables, e.g. on Unix it will look at "TMPDIR" (but not "TEMPDIR") and
    then falls back to "/tmp" (but not "/var/tmp").

    File::HomeDir, a cross-platform way to get user's home directory and a
    few other related directories.

    File::Temp to create a temporary directory.

    <https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest
    .html> for the specification of "XDG_RUNTIME_DIR".

AUTHOR
    perlancar <perlancar@cpan.org>

COPYRIGHT AND LICENSE
    This software is copyright (c) 2018, 2016 by perlancar@cpan.org.

    This is free software; you can redistribute it and/or modify it under
    the same terms as the Perl 5 programming language system itself.