CINXE.COM

File::Spec - portably perform operations on file names - Perldoc Browser

<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>File::Spec - portably perform operations on file names - Perldoc Browser</title> <link rel="search" href="/opensearch.xml" type="application/opensearchdescription+xml" title="Perldoc Browser"> <link rel="canonical" href="https://perldoc.perl.org/File::Spec"> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha384-JcKb8q3iqJ61gNV9KGb8thSsNjpSL0n8PARn9HuZOnIxN0hoP+VmmDGMN5t9UJ0Z" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.5.0/styles/stackoverflow-light.min.css" integrity="sha512-cG1IdFxqipi3gqLmksLtuk13C+hBa57a6zpWxMeoY3Q9O6ooFxq50DayCdm0QrDgZjMUn23z/0PMZlgft7Yp5Q==" crossorigin="anonymous" /> <style> body { background: #f4f4f5; color: #020202; } .navbar-dark { background-image: -webkit-linear-gradient(top, #005f85 0, #002e49 100%); background-image: -o-linear-gradient(top, #005f85 0, #002e49 100%); background-image: linear-gradient(to bottom, #005f85 0, #002e49 100%); filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff005f85', endColorstr='#ff002e49', GradientType=0); background-repeat: repeat-x; } .navbar-dark .navbar-nav .nav-link, .navbar-dark .navbar-nav .nav-link:focus { color: #fff } .navbar-dark .navbar-nav .nav-link:hover { color: #ffef68 } #wrapperlicious { margin: 0 auto; font: 0.9em 'Helvetica Neue', Helvetica, sans-serif; font-weight: normal; line-height: 1.5em; margin: 0; padding: 0; } #wrapperlicious h1 { font-size: 1.5em } #wrapperlicious h2 { font-size: 1.3em } #wrapperlicious h3 { font-size: 1.1em } #wrapperlicious h4 { font-size: 0.9em } #wrapperlicious h1, #wrapperlicious h2, #wrapperlicious h3, #wrapperlicious h4, #wrapperlicious dt { color: #020202; margin-top: 1em; margin-bottom: 1em; position: relative; font-weight: bold; } #wrapperlicious a { color: inherit; text-decoration: underline } #wrapperlicious #toc { text-decoration: none } #wrapperlicious a:hover { color: #2a2a2a } #wrapperlicious a img { border: 0 } #wrapperlicious :not(pre) > code { color: inherit; background-color: rgba(0, 0, 0, 0.04); border-radius: 3px; font: 0.9em Consolas, Menlo, Monaco, monospace; padding: 0.3em; } #wrapperlicious dd { margin: 0; margin-left: 2em; } #wrapperlicious dt { color: #2a2a2a; font-weight: bold; margin-left: 0.9em; } #wrapperlicious p { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious li > p { margin-bottom: 0; margin-top: 0; } #wrapperlicious pre { border: 1px solid #c1c1c1; border-radius: 3px; font: 100% Consolas, Menlo, Monaco, monospace; margin-bottom: 1em; margin-top: 1em; } #wrapperlicious pre > code { display: block; background-color: #f6f6f6; font: 0.9em Consolas, Menlo, Monaco, monospace; line-height: 1.5em; text-align: left; white-space: pre; padding: 1em; } #wrapperlicious dl, #wrapperlicious ol, #wrapperlicious ul { margin-bottom: 1em; margin-top: 1em; } #wrapperlicious ul { list-style-type: square; } #wrapperlicious ul ul { margin-bottom: 0px; margin-top: 0px; } #footer { font-size: 0.8em; padding-top: 0.5em; text-align: center; } #more { display: inline; font-size: 0.8em; } #perldocdiv { background-color: #fff; border: 1px solid #c1c1c1; border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; margin-left: auto; margin-right: auto; padding: 3em; padding-top: 1em; max-width: 960px; } #moduleversion { float: right } #wrapperlicious .leading-notice { font-style: italic; padding-left: 1em; margin-top: 1em; margin-bottom: 1em; } #wrapperlicious .permalink { display: none; left: -0.75em; position: absolute; padding-right: 0.25em; text-decoration: none; } #wrapperlicious h1:hover .permalink, #wrapperlicious h2:hover .permalink, #wrapperlicious h3:hover .permalink, #wrapperlicious h4:hover .permalink, #wrapperlicious dt:hover .permalink { display: block; } </style> <!-- Global site tag (gtag.js) - Google Analytics --> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KVNWBNT5FB"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KVNWBNT5FB'); gtag('config', 'UA-50555-3'); </script> </head> <body> <nav class="navbar navbar-expand-md navbar-dark bg-dark justify-content-between"> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="/"><img src="/images/perl_camel_30.png" width="30" height="30" class="d-inline-block align-top" alt="Perl Camel Logo"> Perldoc Browser</a> <div class="collapse navbar-collapse" id="navbarNav"> <ul class="navbar-nav mr-auto"> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-stable" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">5.14.3</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-stable"> <a class="dropdown-item" href="/File::Spec">Latest</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1/File::Spec">5.40.1</a> <a class="dropdown-item" href="/5.40.0/File::Spec">5.40.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3/File::Spec">5.38.3</a> <a class="dropdown-item" href="/5.38.2/File::Spec">5.38.2</a> <a class="dropdown-item" href="/5.38.1/File::Spec">5.38.1</a> <a class="dropdown-item" href="/5.38.0/File::Spec">5.38.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.36.3/File::Spec">5.36.3</a> <a class="dropdown-item" href="/5.36.2/File::Spec">5.36.2</a> <a class="dropdown-item" href="/5.36.1/File::Spec">5.36.1</a> <a class="dropdown-item" href="/5.36.0/File::Spec">5.36.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.34.3/File::Spec">5.34.3</a> <a class="dropdown-item" href="/5.34.2/File::Spec">5.34.2</a> <a class="dropdown-item" href="/5.34.1/File::Spec">5.34.1</a> <a class="dropdown-item" href="/5.34.0/File::Spec">5.34.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.32.1/File::Spec">5.32.1</a> <a class="dropdown-item" href="/5.32.0/File::Spec">5.32.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.30.3/File::Spec">5.30.3</a> <a class="dropdown-item" href="/5.30.2/File::Spec">5.30.2</a> <a class="dropdown-item" href="/5.30.1/File::Spec">5.30.1</a> <a class="dropdown-item" href="/5.30.0/File::Spec">5.30.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.28.3/File::Spec">5.28.3</a> <a class="dropdown-item" href="/5.28.2/File::Spec">5.28.2</a> <a class="dropdown-item" href="/5.28.1/File::Spec">5.28.1</a> <a class="dropdown-item" href="/5.28.0/File::Spec">5.28.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.26.3/File::Spec">5.26.3</a> <a class="dropdown-item" href="/5.26.2/File::Spec">5.26.2</a> <a class="dropdown-item" href="/5.26.1/File::Spec">5.26.1</a> <a class="dropdown-item" href="/5.26.0/File::Spec">5.26.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.24.4/File::Spec">5.24.4</a> <a class="dropdown-item" href="/5.24.3/File::Spec">5.24.3</a> <a class="dropdown-item" href="/5.24.2/File::Spec">5.24.2</a> <a class="dropdown-item" href="/5.24.1/File::Spec">5.24.1</a> <a class="dropdown-item" href="/5.24.0/File::Spec">5.24.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.22.4/File::Spec">5.22.4</a> <a class="dropdown-item" href="/5.22.3/File::Spec">5.22.3</a> <a class="dropdown-item" href="/5.22.2/File::Spec">5.22.2</a> <a class="dropdown-item" href="/5.22.1/File::Spec">5.22.1</a> <a class="dropdown-item" href="/5.22.0/File::Spec">5.22.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.20.3/File::Spec">5.20.3</a> <a class="dropdown-item" href="/5.20.2/File::Spec">5.20.2</a> <a class="dropdown-item" href="/5.20.1/File::Spec">5.20.1</a> <a class="dropdown-item" href="/5.20.0/File::Spec">5.20.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.18.4/File::Spec">5.18.4</a> <a class="dropdown-item" href="/5.18.3/File::Spec">5.18.3</a> <a class="dropdown-item" href="/5.18.2/File::Spec">5.18.2</a> <a class="dropdown-item" href="/5.18.1/File::Spec">5.18.1</a> <a class="dropdown-item" href="/5.18.0/File::Spec">5.18.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.16.3/File::Spec">5.16.3</a> <a class="dropdown-item" href="/5.16.2/File::Spec">5.16.2</a> <a class="dropdown-item" href="/5.16.1/File::Spec">5.16.1</a> <a class="dropdown-item" href="/5.16.0/File::Spec">5.16.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.14.4/File::Spec">5.14.4</a> <a class="dropdown-item active" href="/5.14.3/File::Spec">5.14.3</a> <a class="dropdown-item" href="/5.14.2/File::Spec">5.14.2</a> <a class="dropdown-item" href="/5.14.1/File::Spec">5.14.1</a> <a class="dropdown-item" href="/5.14.0/File::Spec">5.14.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.12.5/File::Spec">5.12.5</a> <a class="dropdown-item" href="/5.12.4/File::Spec">5.12.4</a> <a class="dropdown-item" href="/5.12.3/File::Spec">5.12.3</a> <a class="dropdown-item" href="/5.12.2/File::Spec">5.12.2</a> <a class="dropdown-item" href="/5.12.1/File::Spec">5.12.1</a> <a class="dropdown-item" href="/5.12.0/File::Spec">5.12.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.10.1/File::Spec">5.10.1</a> <a class="dropdown-item" href="/5.10.0/File::Spec">5.10.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.8.9/File::Spec">5.8.9</a> <a class="dropdown-item" href="/5.8.8/File::Spec">5.8.8</a> <a class="dropdown-item" href="/5.8.7/File::Spec">5.8.7</a> <a class="dropdown-item" href="/5.8.6/File::Spec">5.8.6</a> <a class="dropdown-item" href="/5.8.5/File::Spec">5.8.5</a> <a class="dropdown-item" href="/5.8.4/File::Spec">5.8.4</a> <a class="dropdown-item" href="/5.8.3/File::Spec">5.8.3</a> <a class="dropdown-item" href="/5.8.2/File::Spec">5.8.2</a> <a class="dropdown-item" href="/5.8.1/File::Spec">5.8.1</a> <a class="dropdown-item" href="/5.8.0/File::Spec">5.8.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.6.2/File::Spec">5.6.2</a> <a class="dropdown-item" href="/5.6.1/File::Spec">5.6.1</a> <a class="dropdown-item" href="/5.6.0/File::Spec">5.6.0</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.005_04/File::Spec">5.005_04</a> <a class="dropdown-item" href="/5.005_03/File::Spec">5.005_03</a> <a class="dropdown-item" href="/5.005_02/File::Spec">5.005_02</a> <a class="dropdown-item" href="/5.005_01/File::Spec">5.005_01</a> <a class="dropdown-item" href="/5.005/File::Spec">5.005</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-dev" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dev</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-dev"> <a class="dropdown-item" href="/blead/File::Spec">blead</a> <a class="dropdown-item" href="/5.41.10/File::Spec">5.41.10</a> <a class="dropdown-item" href="/5.41.9/File::Spec">5.41.9</a> <a class="dropdown-item" href="/5.41.8/File::Spec">5.41.8</a> <a class="dropdown-item" href="/5.41.7/File::Spec">5.41.7</a> <a class="dropdown-item" href="/5.41.6/File::Spec">5.41.6</a> <a class="dropdown-item" href="/5.41.5/File::Spec">5.41.5</a> <a class="dropdown-item" href="/5.41.4/File::Spec">5.41.4</a> <a class="dropdown-item" href="/5.41.3/File::Spec">5.41.3</a> <a class="dropdown-item" href="/5.41.2/File::Spec">5.41.2</a> <a class="dropdown-item" href="/5.41.1/File::Spec">5.41.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.40.1-RC1/File::Spec">5.40.1-RC1</a> <a class="dropdown-item" href="/5.40.0-RC2/File::Spec">5.40.0-RC2</a> <a class="dropdown-item" href="/5.40.0-RC1/File::Spec">5.40.0-RC1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.39.10/File::Spec">5.39.10</a> <a class="dropdown-item" href="/5.39.9/File::Spec">5.39.9</a> <a class="dropdown-item" href="/5.39.8/File::Spec">5.39.8</a> <a class="dropdown-item" href="/5.39.7/File::Spec">5.39.7</a> <a class="dropdown-item" href="/5.39.6/File::Spec">5.39.6</a> <a class="dropdown-item" href="/5.39.5/File::Spec">5.39.5</a> <a class="dropdown-item" href="/5.39.4/File::Spec">5.39.4</a> <a class="dropdown-item" href="/5.39.3/File::Spec">5.39.3</a> <a class="dropdown-item" href="/5.39.2/File::Spec">5.39.2</a> <a class="dropdown-item" href="/5.39.1/File::Spec">5.39.1</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.38.3-RC1/File::Spec">5.38.3-RC1</a> </div> </li> <li class="nav-item dropdown text-nowrap"> <a class="nav-link dropdown-toggle" href="#" id="dropdownlink-nav" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Documentation</a> <div class="dropdown-menu" aria-labelledby="dropdownlink-nav"> <a class="dropdown-item" href="/5.14.3/perl">Perl</a> <a class="dropdown-item" href="/5.14.3/perlintro">Intro</a> <a class="dropdown-item" href="/5.14.3/perl#Tutorials">Tutorials</a> <a class="dropdown-item" href="/5.14.3/perlfaq">FAQs</a> <a class="dropdown-item" href="/5.14.3/perl#Reference-Manual">Reference</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.14.3/perlop">Operators</a> <a class="dropdown-item" href="/5.14.3/functions">Functions</a> <a class="dropdown-item" href="/5.14.3/variables">Variables</a> <a class="dropdown-item" href="/5.14.3/modules">Modules</a> <a class="dropdown-item" href="/5.14.3/perlutil">Utilities</a> <div class="dropdown-divider"></div> <a class="dropdown-item" href="/5.14.3/perldelta">Release Notes</a> <a class="dropdown-item" href="/5.14.3/perlcommunity">Community</a> <a class="dropdown-item" href="/5.14.3/perlhist">History</a> </div> </li> </ul> <ul class="navbar-nav"> <script> function set_expand (expand) { var perldocdiv = document.getElementById('perldocdiv'); var width = window.getComputedStyle(perldocdiv).getPropertyValue('max-width'); var expanded = (width == '' || width == 'none') ? true : false; if (expand === null) { expand = !expanded; } if ((expand && !expanded) || (!expand && expanded)) { perldocdiv.style.setProperty('max-width', expand ? 'none' : '960px'); var button_classlist = document.getElementById('content-expand-button').classList; if (expand) { button_classlist.add('btn-light'); button_classlist.remove('btn-outline-light'); } else { button_classlist.add('btn-outline-light'); button_classlist.remove('btn-light'); } } return expand; } function toggle_expand () { var expand = set_expand(null); document.cookie = 'perldoc_expand=' + (expand ? 1 : 0) + '; path=/; expires=Tue, 19 Jan 2038 03:14:07 UTC'; } function read_expand () { return document.cookie.split(';').some(function (item) { return item.indexOf('perldoc_expand=1') >= 0 }); } if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function () { if (read_expand()) { set_expand(true); } }); } else if (read_expand()) { set_expand(true); } </script> <button id="content-expand-button" type="button" class="btn btn-outline-light d-none d-lg-inline-block mr-4" onclick="toggle_expand()">Expand</button> </ul> <form class="form-inline" method="get" action="/5.14.3/search"> <input class="form-control mr-3" type="search" name="q" placeholder="Search" aria-label="Search" value=""> </form> </div> </nav> <div id="wrapperlicious" class="container-fluid"> <div id="perldocdiv"> <div id="links"> <a href="/5.14.3/File::Spec">File::Spec</a> <div id="more"> (<a href="/5.14.3/File::Spec.txt">source</a>, <a href="https://metacpan.org/pod/File::Spec">CPAN</a>) </div> <div id="moduleversion">version 3.33</div> </div> <div class="leading-notice"> You are viewing the version of this documentation from Perl 5.14.3. <a href="/File::Spec">View the latest version</a> </div> <h1><a id="toc">CONTENTS</a></h1> <ul> <li> <a class="text-decoration-none" href="#NAME">NAME</a> </li> <li> <a class="text-decoration-none" href="#SYNOPSIS">SYNOPSIS</a> </li> <li> <a class="text-decoration-none" href="#DESCRIPTION">DESCRIPTION</a> </li> <li> <a class="text-decoration-none" href="#METHODS">METHODS</a> </li> <li> <a class="text-decoration-none" href="#SEE-ALSO">SEE ALSO</a> </li> <li> <a class="text-decoration-none" href="#AUTHOR">AUTHOR</a> </li> <li> <a class="text-decoration-none" href="#COPYRIGHT">COPYRIGHT</a> </li> </ul> <h1 id="NAME"><a class="permalink" href="#NAME">#</a>NAME</h1> <p>File::Spec - portably perform operations on file names</p> <h1 id="SYNOPSIS"><a class="permalink" href="#SYNOPSIS">#</a>SYNOPSIS</h1> <pre><code>use File::Spec; $x=File::Spec-&gt;catfile(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;);</code></pre> <p>which returns &#39;a/b/c&#39; under Unix. Or:</p> <pre><code>use File::Spec::Functions; $x = catfile(&#39;a&#39;, &#39;b&#39;, &#39;c&#39;);</code></pre> <h1 id="DESCRIPTION"><a class="permalink" href="#DESCRIPTION">#</a>DESCRIPTION</h1> <p>This module is designed to support operations commonly performed on file specifications (usually called &quot;file names&quot;, but not to be confused with the contents of a file, or Perl&#39;s file handles), such as concatenating several directory and file names into a single path, or determining whether a path is rooted. It is based on code directly taken from MakeMaker 5.17, code written by Andreas K枚nig, Andy Dougherty, Charles Bailey, Ilya Zakharevich, Paul Schinder, and others.</p> <p>Since these functions are different for most operating systems, each set of OS specific routines is available in a separate module, including:</p> <pre><code class="plaintext">File::Spec::Unix File::Spec::Mac File::Spec::OS2 File::Spec::Win32 File::Spec::VMS</code></pre> <p>The module appropriate for the current OS is automatically loaded by File::Spec. Since some modules (like VMS) make use of facilities available only under that OS, it may not be possible to load all modules under all operating systems.</p> <p>Since File::Spec is object oriented, subroutines should not be called directly, as in:</p> <pre><code>File::Spec::catfile(&#39;a&#39;,&#39;b&#39;);</code></pre> <p>but rather as class methods:</p> <pre><code>File::Spec-&gt;catfile(&#39;a&#39;,&#39;b&#39;);</code></pre> <p>For simple uses, <a href="/5.14.3/File::Spec::Functions">File::Spec::Functions</a> provides convenient functional forms of these methods.</p> <h1 id="METHODS"><a class="permalink" href="#METHODS">#</a>METHODS</h1> <dl> <dt id="canonpath"><a class="permalink" href="#canonpath">#</a>canonpath </dt> <dd> <p>No physical check on the filesystem, but a logical cleanup of a path.</p> <pre><code>$cpath = File::Spec-&gt;canonpath( $path ) ;</code></pre> <p>Note that this does *not* collapse <i>x/../y</i> sections into <i>y</i>. This is by design. If <i>/foo</i> on your system is a symlink to <i>/bar/baz</i>, then <i>/foo/../quux</i> is actually <i>/bar/quux</i>, not <i>/quux</i> as a naive <i>../</i>-removal would give you. If you want to do this kind of processing, you probably want <code>Cwd</code>&#39;s <code>realpath()</code> function to actually traverse the filesystem cleaning up paths like this.</p> </dd> <dt id="catdir"><a class="permalink" href="#catdir">#</a>catdir </dt> <dd> <p>Concatenate two or more directory names to form a complete path ending with a directory. But remove the trailing slash from the resulting string, because it doesn&#39;t look good, isn&#39;t necessary and confuses OS/2. Of course, if this is the root directory, don&#39;t cut off the trailing slash :-)</p> <pre><code>$path = File::Spec-&gt;catdir( @directories );</code></pre> </dd> <dt id="catfile"><a class="permalink" href="#catfile">#</a>catfile </dt> <dd> <p>Concatenate one or more directory names and a filename to form a complete path ending with a filename</p> <pre><code>$path = File::Spec-&gt;catfile( @directories, $filename );</code></pre> </dd> <dt id="curdir"><a class="permalink" href="#curdir">#</a>curdir </dt> <dd> <p>Returns a string representation of the current directory.</p> <pre><code>$curdir = File::Spec-&gt;curdir();</code></pre> </dd> <dt id="devnull"><a class="permalink" href="#devnull">#</a>devnull </dt> <dd> <p>Returns a string representation of the null device.</p> <pre><code>$devnull = File::Spec-&gt;devnull();</code></pre> </dd> <dt id="rootdir"><a class="permalink" href="#rootdir">#</a>rootdir </dt> <dd> <p>Returns a string representation of the root directory.</p> <pre><code>$rootdir = File::Spec-&gt;rootdir();</code></pre> </dd> <dt id="tmpdir"><a class="permalink" href="#tmpdir">#</a>tmpdir </dt> <dd> <p>Returns a string representation of the first writable directory from a list of possible temporary directories. Returns the current directory if no writable temporary directories are found. The list of directories checked depends on the platform; e.g. File::Spec::Unix checks <code>$ENV{TMPDIR}</code> (unless taint is on) and <i>/tmp</i>.</p> <pre><code>$tmpdir = File::Spec-&gt;tmpdir();</code></pre> </dd> <dt id="updir"><a class="permalink" href="#updir">#</a>updir </dt> <dd> <p>Returns a string representation of the parent directory.</p> <pre><code>$updir = File::Spec-&gt;updir();</code></pre> </dd> <dt id="no_upwards"><a class="permalink" href="#no_upwards">#</a>no_upwards</dt> <dd> <p>Given a list of file names, strip out those that refer to a parent directory. (Does not strip symlinks, only &#39;.&#39;, &#39;..&#39;, and equivalents.)</p> <pre><code>@paths = File::Spec-&gt;no_upwards( @paths );</code></pre> </dd> <dt id="case_tolerant"><a class="permalink" href="#case_tolerant">#</a>case_tolerant</dt> <dd> <p>Returns a true or false value indicating, respectively, that alphabetic case is not or is significant when comparing file specifications. Cygwin and Win32 accept an optional drive argument.</p> <pre><code>$is_case_tolerant = File::Spec-&gt;case_tolerant();</code></pre> </dd> <dt id="file_name_is_absolute"><a class="permalink" href="#file_name_is_absolute">#</a>file_name_is_absolute</dt> <dd> <p>Takes as its argument a path, and returns true if it is an absolute path.</p> <pre><code>$is_absolute = File::Spec-&gt;file_name_is_absolute( $path );</code></pre> <p>This does not consult the local filesystem on Unix, Win32, OS/2, or Mac OS (Classic). It does consult the working environment for VMS (see <a href="/5.14.3/File::Spec::VMS#file_name_is_absolute">&quot;file_name_is_absolute&quot; in File::Spec::VMS</a>).</p> </dd> <dt id="path"><a class="permalink" href="#path">#</a>path </dt> <dd> <p>Takes no argument. Returns the environment variable <code>PATH</code> (or the local platform&#39;s equivalent) as a list.</p> <pre><code>@PATH = File::Spec-&gt;path();</code></pre> </dd> <dt id="join"><a class="permalink" href="#join">#</a>join </dt> <dd> <p>join is the same as catfile.</p> </dd> <dt id="splitpath"><a class="permalink" href="#splitpath">#</a>splitpath </dt> <dd> <p>Splits a path in to volume, directory, and filename portions. On systems with no concept of volume, returns &#39;&#39; for volume.</p> <pre><code>($volume,$directories,$file) = File::Spec-&gt;splitpath( $path ); ($volume,$directories,$file) = File::Spec-&gt;splitpath( $path, $no_file );</code></pre> <p>For systems with no syntax differentiating filenames from directories, assumes that the last file is a path unless <code>$no_file</code> is true or a trailing separator or <i>/.</i> or <i>/..</i> is present. On Unix, this means that <code>$no_file</code> true makes this return ( &#39;&#39;, $path, &#39;&#39; ).</p> <p>The directory portion may or may not be returned with a trailing &#39;/&#39;.</p> <p>The results can be passed to <a href="#catpath()">&quot;catpath()&quot;</a> to get back a path equivalent to (usually identical to) the original path.</p> </dd> <dt id="splitdir"><a class="permalink" href="#splitdir">#</a>splitdir </dt> <dd> <p>The opposite of <a href="#catdir">&quot;catdir&quot;</a>.</p> <pre><code>@dirs = File::Spec-&gt;splitdir( $directories );</code></pre> <p><code>$directories</code> must be only the directory portion of the path on systems that have the concept of a volume or that have path syntax that differentiates files from directories.</p> <p>Unlike just splitting the directories on the separator, empty directory names (<code>&#39;&#39;</code>) can be returned, because these are significant on some OSes.</p> </dd> <dt id="catpath()"><a class="permalink" href="#catpath()">#</a><a id="catpath"></a>catpath()</dt> <dd> <p>Takes volume, directory and file portions and returns an entire path. Under Unix, <code>$volume</code> is ignored, and directory and file are concatenated. A &#39;/&#39; is inserted if need be. On other OSes, <code>$volume</code> is significant.</p> <pre><code>$full_path = File::Spec-&gt;catpath( $volume, $directory, $file );</code></pre> </dd> <dt id="abs2rel"><a class="permalink" href="#abs2rel">#</a>abs2rel </dt> <dd> <p>Takes a destination path and an optional base path returns a relative path from the base path to the destination path:</p> <pre><code>$rel_path = File::Spec-&gt;abs2rel( $path ) ; $rel_path = File::Spec-&gt;abs2rel( $path, $base ) ;</code></pre> <p>If <code>$base</code> is not present or &#39;&#39;, then <a href="/5.14.3/Cwd">Cwd::cwd()</a> is used. If <code>$base</code> is relative, then it is converted to absolute form using <a href="#rel2abs()">&quot;rel2abs()&quot;</a>. This means that it is taken to be relative to <a href="/5.14.3/Cwd">Cwd::cwd()</a>.</p> <p>On systems with the concept of volume, if <code>$path</code> and <code>$base</code> appear to be on two different volumes, we will not attempt to resolve the two paths, and we will instead simply return <code>$path</code>. Note that previous versions of this module ignored the volume of <code>$base</code>, which resulted in garbage results part of the time.</p> <p>On systems that have a grammar that indicates filenames, this ignores the <code>$base</code> filename as well. Otherwise all path components are assumed to be directories.</p> <p>If <code>$path</code> is relative, it is converted to absolute form using <a href="#rel2abs()">&quot;rel2abs()&quot;</a>. This means that it is taken to be relative to <a href="/5.14.3/Cwd">Cwd::cwd()</a>.</p> <p>No checks against the filesystem are made. On VMS, there is interaction with the working environment, as logicals and macros are expanded.</p> <p>Based on code written by Shigio Yamaguchi.</p> </dd> <dt id="rel2abs()"><a class="permalink" href="#rel2abs()">#</a><a id="rel2abs"></a>rel2abs() </dt> <dd> <p>Converts a relative path to an absolute path.</p> <pre><code>$abs_path = File::Spec-&gt;rel2abs( $path ) ; $abs_path = File::Spec-&gt;rel2abs( $path, $base ) ;</code></pre> <p>If <code>$base</code> is not present or &#39;&#39;, then <a href="/5.14.3/Cwd">Cwd::cwd()</a> is used. If <code>$base</code> is relative, then it is converted to absolute form using <a href="#rel2abs()">&quot;rel2abs()&quot;</a>. This means that it is taken to be relative to <a href="/5.14.3/Cwd">Cwd::cwd()</a>.</p> <p>On systems with the concept of volume, if <code>$path</code> and <code>$base</code> appear to be on two different volumes, we will not attempt to resolve the two paths, and we will instead simply return <code>$path</code>. Note that previous versions of this module ignored the volume of <code>$base</code>, which resulted in garbage results part of the time.</p> <p>On systems that have a grammar that indicates filenames, this ignores the <code>$base</code> filename as well. Otherwise all path components are assumed to be directories.</p> <p>If <code>$path</code> is absolute, it is cleaned up and returned using <a href="#canonpath">&quot;canonpath&quot;</a>.</p> <p>No checks against the filesystem are made. On VMS, there is interaction with the working environment, as logicals and macros are expanded.</p> <p>Based on code written by Shigio Yamaguchi.</p> </dd> </dl> <p>For further information, please see <a href="/5.14.3/File::Spec::Unix">File::Spec::Unix</a>, <a href="/5.14.3/File::Spec::Mac">File::Spec::Mac</a>, <a href="/5.14.3/File::Spec::OS2">File::Spec::OS2</a>, <a href="/5.14.3/File::Spec::Win32">File::Spec::Win32</a>, or <a href="/5.14.3/File::Spec::VMS">File::Spec::VMS</a>.</p> <h1 id="SEE-ALSO"><a class="permalink" href="#SEE-ALSO">#</a><a id="SEE"></a>SEE ALSO</h1> <p><a href="/5.14.3/File::Spec::Unix">File::Spec::Unix</a>, <a href="/5.14.3/File::Spec::Mac">File::Spec::Mac</a>, <a href="/5.14.3/File::Spec::OS2">File::Spec::OS2</a>, <a href="/5.14.3/File::Spec::Win32">File::Spec::Win32</a>, <a href="/5.14.3/File::Spec::VMS">File::Spec::VMS</a>, <a href="/5.14.3/File::Spec::Functions">File::Spec::Functions</a>, <a href="/5.14.3/ExtUtils::MakeMaker">ExtUtils::MakeMaker</a></p> <h1 id="AUTHOR"><a class="permalink" href="#AUTHOR">#</a>AUTHOR</h1> <p>Currently maintained by Ken Williams <code>&lt;KWILLIAMS@cpan.org&gt;</code>.</p> <p>The vast majority of the code was written by Kenneth Albanowski <code>&lt;kjahds@kjahds.com&gt;</code>, Andy Dougherty <code>&lt;doughera@lafayette.edu&gt;</code>, Andreas K枚nig <code>&lt;A.Koenig@franz.ww.TU-Berlin.DE&gt;</code>, Tim Bunce <code>&lt;Tim.Bunce@ig.co.uk&gt;</code>. VMS support by Charles Bailey <code>&lt;bailey@newman.upenn.edu&gt;</code>. OS/2 support by Ilya Zakharevich <code>&lt;ilya@math.ohio-state.edu&gt;</code>. Mac support by Paul Schinder <code>&lt;schinder@pobox.com&gt;</code>, and Thomas Wegner <code>&lt;wegner_thomas@yahoo.com&gt;</code>. abs2rel() and rel2abs() written by Shigio Yamaguchi <code>&lt;shigio@tamacom.com&gt;</code>, modified by Barrie Slaymaker <code>&lt;barries@slaysys.com&gt;</code>. splitpath(), splitdir(), catpath() and catdir() by Barrie Slaymaker.</p> <h1 id="COPYRIGHT"><a class="permalink" href="#COPYRIGHT">#</a>COPYRIGHT</h1> <p>Copyright (c) 2004-2010 by the Perl 5 Porters. All rights reserved.</p> <p>This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.</p> </div> <div id="footer"> <p>Perldoc Browser is maintained by Dan Book (<a href="https://metacpan.org/author/DBOOK">DBOOK</a>). Please contact him via the <a href="https://github.com/Grinnz/perldoc-browser/issues">GitHub issue tracker</a> or <a href="mailto:dbook@cpan.org">email</a> regarding any issues with the site itself, search, or rendering of documentation.</p> <p>The Perl documentation is maintained by the Perl 5 Porters in the development of Perl. Please contact them via the <a href="https://github.com/Perl/perl5/issues">Perl issue tracker</a>, the <a href="https://lists.perl.org/list/perl5-porters.html">mailing list</a>, or <a href="https://kiwiirc.com/client/irc.perl.org/p5p">IRC</a> to report any issues with the contents or format of the documentation.</p> </div> </div> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js" integrity="sha512-/DXTXr6nQodMUiq+IUJYCt2PPOUjrHJ9wFrqpJ3XkgPNOZVfMok7cRw6CSxyCQxXn6ozlESsSh1/sMCTF1rL/g==" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/umd/popper.min.js" integrity="sha512-ubuT8Z88WxezgSqf3RLuNi5lmjstiJcyezx34yIU2gAHonIi27Na7atqzUZCOoY4CExaoFumzOsFQ2Ch+I/HCw==" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" integrity="sha384-B4gt1jrGC7Jh4AgTPSdUtOBvfO8shuf57BaghqFfPlYxofvL8/KUEfYiJOMMV+rV" crossorigin="anonymous"></script> <script src="/js/highlight.pack.js"></script> <script>hljs.highlightAll();</script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10