{
    "content": [
        {
            "type": "text",
            "text": "# File::Spec::Mac (perldoc)\n\n**Summary:** File::Spec::Mac - File::Spec for Mac OS (Classic)\n\n**Synopsis:** require File::Spec::Mac; # Done internally by File::Spec if needed\n\n## Section Outline\n\n- **NAME** (2 lines)\n- **SYNOPSIS** (2 lines)\n- **DESCRIPTION** (2 lines)\n- **METHODS** (3 lines) — 1 subsections\n  - catdir (302 lines)\n- **AUTHORS** (3 lines)\n- **COPYRIGHT** (5 lines)\n- **SEE ALSO** (3 lines)\n\n## Full Content\n\n### NAME\n\nFile::Spec::Mac - File::Spec for Mac OS (Classic)\n\n### SYNOPSIS\n\nrequire File::Spec::Mac; # Done internally by File::Spec if needed\n\n### DESCRIPTION\n\nMethods for manipulating file specifications.\n\n### METHODS\n\ncanonpath\nOn Mac OS, there's nothing to be done. Returns what it's given.\n\n#### catdir\n\nConcatenate two or more directory names to form a path separated by colons (\":\") ending with a\ndirectory. Resulting paths are relative by default, but can be forced to be absolute (but\navoid this, see below). Automatically puts a trailing \":\" on the end of the complete path,\nbecause that's what's done in MacPerl's environment and helps to distinguish a file path from\na directory path.\n\nIMPORTANT NOTE: Beginning with version 1.3 of this module, the resulting path is relative by\ndefault and *not* absolute. This decision was made due to portability reasons. Since\n\"File::Spec->catdir()\" returns relative paths on all other operating systems, it will now also\nfollow this convention on Mac OS. Note that this may break some existing scripts.\n\nThe intended purpose of this routine is to concatenate *directory names*. But because of the\nnature of Macintosh paths, some additional possibilities are allowed to make using this\nroutine give reasonable results for some common situations. In other words, you are also\nallowed to concatenate *paths* instead of directory names (strictly speaking, a string like\n\":a\" is a path, but not a name, since it contains a punctuation character \":\").\n\nSo, beside calls like\n\ncatdir(\"a\") = \":a:\"\ncatdir(\"a\",\"b\") = \":a:b:\"\ncatdir() = \"\"                    (special case)\n\ncalls like the following\n\ncatdir(\":a:\") = \":a:\"\ncatdir(\":a\",\"b\") = \":a:b:\"\ncatdir(\":a:\",\"b\") = \":a:b:\"\ncatdir(\":a:\",\":b:\") = \":a:b:\"\ncatdir(\":\") = \":\"\n\nare allowed.\n\nHere are the rules that are used in \"catdir()\"; note that we try to be as compatible as\npossible to Unix:\n\n1.\nThe resulting path is relative by default, i.e. the resulting path will have a leading\ncolon.\n\n2.\nA trailing colon is added automatically to the resulting path, to denote a directory.\n\n3.\nGenerally, each argument has one leading \":\" and one trailing \":\" removed (if any). They are\nthen joined together by a \":\". Special treatment applies for arguments denoting updir paths\nlike \"::lib:\", see (4), or arguments consisting solely of colons (\"colon paths\"), see (5).\n\n4.\nWhen an updir path like \":::lib::\" is passed as argument, the number of directories to climb\nup is handled correctly, not removing leading or trailing colons when necessary. E.g.\n\ncatdir(\":::a\",\"::b\",\"c\")    = \":::a::b:c:\"\ncatdir(\":::a::\",\"::b\",\"c\")  = \":::a:::b:c:\"\n\n5.\nAdding a colon \":\" or empty string \"\" to a path at *any* position doesn't alter the path,\ni.e. these arguments are ignored. (When a \"\" is passed as the first argument, it has a\nspecial meaning, see (6)). This way, a colon \":\" is handled like a \".\" (curdir) on Unix,\nwhile an empty string \"\" is generally ignored (see \"canonpath()\" in File::Spec::Unix ).\nLikewise, a \"::\" is handled like a \"..\" (updir), and a \":::\" is handled like a \"../..\" etc.\nE.g.\n\ncatdir(\"a\",\":\",\":\",\"b\")   = \":a:b:\"\ncatdir(\"a\",\":\",\"::\",\":b\") = \":a::b:\"\n\n6.\nIf the first argument is an empty string \"\" or is a volume name, i.e. matches the pattern\n/^[^:]+:/, the resulting path is absolute.\n\n7.\nPassing an empty string \"\" as the first argument to \"catdir()\" is like\npassing\"File::Spec->rootdir()\" as the first argument, i.e.\n\ncatdir(\"\",\"a\",\"b\")          is the same as\n\ncatdir(rootdir(),\"a\",\"b\").\n\nThis is true on Unix, where \"catdir(\"\",\"a\",\"b\")\" yields \"/a/b\" and \"rootdir()\" is \"/\". Note\nthat \"rootdir()\" on Mac OS is the startup volume, which is the closest in concept to Unix'\n\"/\". This should help to run existing scripts originally written for Unix.\n\n8.\nFor absolute paths, some cleanup is done, to ensure that the volume name isn't immediately\nfollowed by updirs. This is invalid, because this would go beyond \"root\". Generally, these\ncases are handled like their Unix counterparts:\n\nUnix:\nUnix->catdir(\"\",\"\")                 =  \"/\"\nUnix->catdir(\"\",\".\")                =  \"/\"\nUnix->catdir(\"\",\"..\")               =  \"/\"        # can't go\n# beyond root\nUnix->catdir(\"\",\".\",\"..\",\"..\",\"a\")  =  \"/a\"\nMac:\nMac->catdir(\"\",\"\")                  =  rootdir()  # (e.g. \"HD:\")\nMac->catdir(\"\",\":\")                 =  rootdir()\nMac->catdir(\"\",\"::\")                =  rootdir()  # can't go\n# beyond root\nMac->catdir(\"\",\":\",\"::\",\"::\",\"a\")   =  rootdir() . \"a:\"\n# (e.g. \"HD:a:\")\n\nHowever, this approach is limited to the first arguments following \"root\" (again, see\n\"canonpath()\" in File::Spec::Unix. If there are more arguments that move up the directory\ntree, an invalid path going beyond root can be created.\n\nAs you've seen, you can force \"catdir()\" to create an absolute path by passing either an empty\nstring or a path that begins with a volume name as the first argument. However, you are\nstrongly encouraged not to do so, since this is done only for backward compatibility. Newer\nversions of File::Spec come with a method called \"catpath()\" (see below), that is designed to\noffer a portable solution for the creation of absolute paths. It takes volume, directory and\nfile portions and returns an entire path. While \"catdir()\" is still suitable for the\nconcatenation of *directory names*, you are encouraged to use \"catpath()\" to concatenate\n*volume names* and *directory paths*. E.g.\n\n$dir      = File::Spec->catdir(\"tmp\",\"sources\");\n$abspath = File::Spec->catpath(\"MacintoshHD:\", $dir,\"\");\n\nyields\n\n\"MacintoshHD:tmp:sources:\" .\n\ncatfile\nConcatenate one or more directory names and a filename to form a complete path ending with a\nfilename. Resulting paths are relative by default, but can be forced to be absolute (but avoid\nthis).\n\nIMPORTANT NOTE: Beginning with version 1.3 of this module, the resulting path is relative by\ndefault and *not* absolute. This decision was made due to portability reasons. Since\n\"File::Spec->catfile()\" returns relative paths on all other operating systems, it will now\nalso follow this convention on Mac OS. Note that this may break some existing scripts.\n\nThe last argument is always considered to be the file portion. Since \"catfile()\" uses\n\"catdir()\" (see above) for the concatenation of the directory portions (if any), the following\nwith regard to relative and absolute paths is true:\n\ncatfile(\"\")     = \"\"\ncatfile(\"file\") = \"file\"\n\nbut\n\ncatfile(\"\",\"\")        = rootdir()         # (e.g. \"HD:\")\ncatfile(\"\",\"file\")    = rootdir() . file  # (e.g. \"HD:file\")\ncatfile(\"HD:\",\"file\") = \"HD:file\"\n\nThis means that \"catdir()\" is called only when there are two or more arguments, as one might\nexpect.\n\nNote that the leading \":\" is removed from the filename, so that\n\ncatfile(\"a\",\"b\",\"file\")  = \":a:b:file\"    and\n\ncatfile(\"a\",\"b\",\":file\") = \":a:b:file\"\n\ngive the same answer.\n\nTo concatenate *volume names*, *directory paths* and *filenames*, you are encouraged to use\n\"catpath()\" (see below).\n\ncurdir\nReturns a string representing the current directory. On Mac OS, this is \":\".\n\ndevnull\nReturns a string representing the null device. On Mac OS, this is \"Dev:Null\".\n\nrootdir\nReturns the empty string. Mac OS has no real root directory.\n\ntmpdir\nReturns the contents of $ENV{TMPDIR}, if that directory exits or the current working directory\notherwise. Under MacPerl, $ENV{TMPDIR} will contain a path like \"MacintoshHD:Temporary\nItems:\", which is a hidden directory on your startup volume.\n\nupdir\nReturns a string representing the parent directory. On Mac OS, this is \"::\".\n\nfilenameisabsolute\nTakes as argument a path and returns true, if it is an absolute path. If the path has a\nleading \":\", it's a relative path. Otherwise, it's an absolute path, unless the path doesn't\ncontain any colons, i.e. it's a name like \"a\". In this particular case, the path is considered\nto be relative (i.e. it is considered to be a filename). Use \":\" in the appropriate place in\nthe path if you want to distinguish unambiguously. As a special case, the filename '' is\nalways considered to be absolute. Note that with version 1.2 of File::Spec::Mac, this does no\nlonger consult the local filesystem.\n\nE.g.\n\nFile::Spec->filenameisabsolute(\"a\");         # false (relative)\nFile::Spec->filenameisabsolute(\":a:b:\");     # false (relative)\nFile::Spec->filenameisabsolute(\"MacintoshHD:\");\n# true (absolute)\nFile::Spec->filenameisabsolute(\"\");          # true (absolute)\n\npath\nReturns the null list for the MacPerl application, since the concept is usually meaningless\nunder Mac OS. But if you're using the MacPerl tool under MPW, it gives back $ENV{Commands}\nsuitably split, as is done in :lib:ExtUtils:MMMac.pm.\n\nsplitpath\n($volume,$directories,$file) = File::Spec->splitpath( $path );\n($volume,$directories,$file) = File::Spec->splitpath( $path,\n$nofile );\n\nSplits a path into volume, directory, and filename portions.\n\nOn Mac OS, assumes that the last part of the path is a filename unless $nofile is true or a\ntrailing separator \":\" is present.\n\nThe volume portion is always returned with a trailing \":\". The directory portion is always\nreturned with a leading (to denote a relative path) and a trailing \":\" (to denote a\ndirectory). The file portion is always returned *without* a leading \":\". Empty portions are\nreturned as empty string ''.\n\nThe results can be passed to \"catpath()\" to get back a path equivalent to (usually identical\nto) the original path.\n\nsplitdir\nThe opposite of \"catdir()\".\n\n@dirs = File::Spec->splitdir( $directories );\n\n$directories should be only the directory portion of the path on systems that have the concept\nof a volume or that have path syntax that differentiates files from directories. Consider\nusing \"splitpath()\" otherwise.\n\nUnlike just splitting the directories on the separator, empty directory names (\"\") can be\nreturned. Since \"catdir()\" on Mac OS always appends a trailing colon to distinguish a\ndirectory path from a file path, a single trailing colon will be ignored, i.e. there's no\nempty directory name after it.\n\nHence, on Mac OS, both\n\nFile::Spec->splitdir( \":a:b::c:\" );    and\nFile::Spec->splitdir( \":a:b::c\" );\n\nyield:\n\n( \"a\", \"b\", \"::\", \"c\")\n\nwhile\n\nFile::Spec->splitdir( \":a:b::c::\" );\n\nyields:\n\n( \"a\", \"b\", \"::\", \"c\", \"::\")\n\ncatpath\n$path = File::Spec->catpath($volume,$directory,$file);\n\nTakes volume, directory and file portions and returns an entire path. On Mac OS, $volume,\n$directory and $file are concatenated. A ':' is inserted if need be. You may pass an empty\nstring for each portion. If all portions are empty, the empty string is returned. If $volume\nis empty, the result will be a relative path, beginning with a ':'. If $volume and $directory\nare empty, a leading \":\" (if any) is removed form $file and the remainder is returned. If\n$file is empty, the resulting path will have a trailing ':'.\n\nabs2rel\nTakes a destination path and an optional base path and returns a relative path from the base\npath to the destination path:\n\n$relpath = File::Spec->abs2rel( $path ) ;\n$relpath = File::Spec->abs2rel( $path, $base ) ;\n\nNote that both paths are assumed to have a notation that distinguishes a directory path (with\ntrailing ':') from a file path (without trailing ':').\n\nIf $base is not present or '', then the current working directory is used. If $base is\nrelative, then it is converted to absolute form using \"rel2abs()\". This means that it is taken\nto be relative to the current working directory.\n\nIf $path and $base appear to be on two different volumes, we will not attempt to resolve the\ntwo paths, and we will instead simply return $path. Note that previous versions of this module\nignored the volume of $base, which resulted in garbage results part of the time.\n\nIf $base doesn't have a trailing colon, the last element of $base is assumed to be a filename.\nThis filename is ignored. Otherwise all path components are assumed to be directories.\n\nIf $path is relative, it is converted to absolute form using \"rel2abs()\". This means that it\nis taken to be relative to the current working directory.\n\nBased on code written by Shigio Yamaguchi.\n\nrel2abs\nConverts a relative path to an absolute path:\n\n$abspath = File::Spec->rel2abs( $path ) ;\n$abspath = File::Spec->rel2abs( $path, $base ) ;\n\nNote that both paths are assumed to have a notation that distinguishes a directory path (with\ntrailing ':') from a file path (without trailing ':').\n\nIf $base is not present or '', then $base is set to the current working directory. If $base is\nrelative, then it is converted to absolute form using \"rel2abs()\". This means that it is taken\nto be relative to the current working directory.\n\nIf $base doesn't have a trailing colon, the last element of $base is assumed to be a filename.\nThis filename is ignored. Otherwise all path components are assumed to be directories.\n\nIf $path is already absolute, it is returned and $base is ignored.\n\nBased on code written by Shigio Yamaguchi.\n\n### AUTHORS\n\nSee the authors list in *File::Spec*. Mac OS support by Paul Schinder <schinder@pobox.com> and\nThomas Wegner <wegnerthomas@yahoo.com>.\n\n### COPYRIGHT\n\nCopyright (c) 2004 by the Perl 5 Porters. All rights reserved.\n\nThis program is free software; you can redistribute it and/or modify it under the same terms as\nPerl itself.\n\n### SEE ALSO\n\nSee File::Spec and File::Spec::Unix. This package overrides the implementation of these methods,\nnot the semantics.\n\n"
        }
    ],
    "structuredContent": {
        "command": "File::Spec::Mac",
        "section": "",
        "mode": "perldoc",
        "summary": "File::Spec::Mac - File::Spec for Mac OS (Classic)",
        "synopsis": "require File::Spec::Mac; # Done internally by File::Spec if needed",
        "tldr_summary": null,
        "tldr_examples": [],
        "tldr_source": null,
        "flags": [],
        "examples": [],
        "see_also": [],
        "section_outline": [
            {
                "name": "NAME",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "SYNOPSIS",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "DESCRIPTION",
                "lines": 2,
                "subsections": []
            },
            {
                "name": "METHODS",
                "lines": 3,
                "subsections": [
                    {
                        "name": "catdir",
                        "lines": 302
                    }
                ]
            },
            {
                "name": "AUTHORS",
                "lines": 3,
                "subsections": []
            },
            {
                "name": "COPYRIGHT",
                "lines": 5,
                "subsections": []
            },
            {
                "name": "SEE ALSO",
                "lines": 3,
                "subsections": []
            }
        ],
        "sections": {
            "NAME": {
                "content": "File::Spec::Mac - File::Spec for Mac OS (Classic)\n",
                "subsections": []
            },
            "SYNOPSIS": {
                "content": "require File::Spec::Mac; # Done internally by File::Spec if needed\n",
                "subsections": []
            },
            "DESCRIPTION": {
                "content": "Methods for manipulating file specifications.\n",
                "subsections": []
            },
            "METHODS": {
                "content": "canonpath\nOn Mac OS, there's nothing to be done. Returns what it's given.\n",
                "subsections": [
                    {
                        "name": "catdir",
                        "content": "Concatenate two or more directory names to form a path separated by colons (\":\") ending with a\ndirectory. Resulting paths are relative by default, but can be forced to be absolute (but\navoid this, see below). Automatically puts a trailing \":\" on the end of the complete path,\nbecause that's what's done in MacPerl's environment and helps to distinguish a file path from\na directory path.\n\nIMPORTANT NOTE: Beginning with version 1.3 of this module, the resulting path is relative by\ndefault and *not* absolute. This decision was made due to portability reasons. Since\n\"File::Spec->catdir()\" returns relative paths on all other operating systems, it will now also\nfollow this convention on Mac OS. Note that this may break some existing scripts.\n\nThe intended purpose of this routine is to concatenate *directory names*. But because of the\nnature of Macintosh paths, some additional possibilities are allowed to make using this\nroutine give reasonable results for some common situations. In other words, you are also\nallowed to concatenate *paths* instead of directory names (strictly speaking, a string like\n\":a\" is a path, but not a name, since it contains a punctuation character \":\").\n\nSo, beside calls like\n\ncatdir(\"a\") = \":a:\"\ncatdir(\"a\",\"b\") = \":a:b:\"\ncatdir() = \"\"                    (special case)\n\ncalls like the following\n\ncatdir(\":a:\") = \":a:\"\ncatdir(\":a\",\"b\") = \":a:b:\"\ncatdir(\":a:\",\"b\") = \":a:b:\"\ncatdir(\":a:\",\":b:\") = \":a:b:\"\ncatdir(\":\") = \":\"\n\nare allowed.\n\nHere are the rules that are used in \"catdir()\"; note that we try to be as compatible as\npossible to Unix:\n\n1.\nThe resulting path is relative by default, i.e. the resulting path will have a leading\ncolon.\n\n2.\nA trailing colon is added automatically to the resulting path, to denote a directory.\n\n3.\nGenerally, each argument has one leading \":\" and one trailing \":\" removed (if any). They are\nthen joined together by a \":\". Special treatment applies for arguments denoting updir paths\nlike \"::lib:\", see (4), or arguments consisting solely of colons (\"colon paths\"), see (5).\n\n4.\nWhen an updir path like \":::lib::\" is passed as argument, the number of directories to climb\nup is handled correctly, not removing leading or trailing colons when necessary. E.g.\n\ncatdir(\":::a\",\"::b\",\"c\")    = \":::a::b:c:\"\ncatdir(\":::a::\",\"::b\",\"c\")  = \":::a:::b:c:\"\n\n5.\nAdding a colon \":\" or empty string \"\" to a path at *any* position doesn't alter the path,\ni.e. these arguments are ignored. (When a \"\" is passed as the first argument, it has a\nspecial meaning, see (6)). This way, a colon \":\" is handled like a \".\" (curdir) on Unix,\nwhile an empty string \"\" is generally ignored (see \"canonpath()\" in File::Spec::Unix ).\nLikewise, a \"::\" is handled like a \"..\" (updir), and a \":::\" is handled like a \"../..\" etc.\nE.g.\n\ncatdir(\"a\",\":\",\":\",\"b\")   = \":a:b:\"\ncatdir(\"a\",\":\",\"::\",\":b\") = \":a::b:\"\n\n6.\nIf the first argument is an empty string \"\" or is a volume name, i.e. matches the pattern\n/^[^:]+:/, the resulting path is absolute.\n\n7.\nPassing an empty string \"\" as the first argument to \"catdir()\" is like\npassing\"File::Spec->rootdir()\" as the first argument, i.e.\n\ncatdir(\"\",\"a\",\"b\")          is the same as\n\ncatdir(rootdir(),\"a\",\"b\").\n\nThis is true on Unix, where \"catdir(\"\",\"a\",\"b\")\" yields \"/a/b\" and \"rootdir()\" is \"/\". Note\nthat \"rootdir()\" on Mac OS is the startup volume, which is the closest in concept to Unix'\n\"/\". This should help to run existing scripts originally written for Unix.\n\n8.\nFor absolute paths, some cleanup is done, to ensure that the volume name isn't immediately\nfollowed by updirs. This is invalid, because this would go beyond \"root\". Generally, these\ncases are handled like their Unix counterparts:\n\nUnix:\nUnix->catdir(\"\",\"\")                 =  \"/\"\nUnix->catdir(\"\",\".\")                =  \"/\"\nUnix->catdir(\"\",\"..\")               =  \"/\"        # can't go\n# beyond root\nUnix->catdir(\"\",\".\",\"..\",\"..\",\"a\")  =  \"/a\"\nMac:\nMac->catdir(\"\",\"\")                  =  rootdir()  # (e.g. \"HD:\")\nMac->catdir(\"\",\":\")                 =  rootdir()\nMac->catdir(\"\",\"::\")                =  rootdir()  # can't go\n# beyond root\nMac->catdir(\"\",\":\",\"::\",\"::\",\"a\")   =  rootdir() . \"a:\"\n# (e.g. \"HD:a:\")\n\nHowever, this approach is limited to the first arguments following \"root\" (again, see\n\"canonpath()\" in File::Spec::Unix. If there are more arguments that move up the directory\ntree, an invalid path going beyond root can be created.\n\nAs you've seen, you can force \"catdir()\" to create an absolute path by passing either an empty\nstring or a path that begins with a volume name as the first argument. However, you are\nstrongly encouraged not to do so, since this is done only for backward compatibility. Newer\nversions of File::Spec come with a method called \"catpath()\" (see below), that is designed to\noffer a portable solution for the creation of absolute paths. It takes volume, directory and\nfile portions and returns an entire path. While \"catdir()\" is still suitable for the\nconcatenation of *directory names*, you are encouraged to use \"catpath()\" to concatenate\n*volume names* and *directory paths*. E.g.\n\n$dir      = File::Spec->catdir(\"tmp\",\"sources\");\n$abspath = File::Spec->catpath(\"MacintoshHD:\", $dir,\"\");\n\nyields\n\n\"MacintoshHD:tmp:sources:\" .\n\ncatfile\nConcatenate one or more directory names and a filename to form a complete path ending with a\nfilename. Resulting paths are relative by default, but can be forced to be absolute (but avoid\nthis).\n\nIMPORTANT NOTE: Beginning with version 1.3 of this module, the resulting path is relative by\ndefault and *not* absolute. This decision was made due to portability reasons. Since\n\"File::Spec->catfile()\" returns relative paths on all other operating systems, it will now\nalso follow this convention on Mac OS. Note that this may break some existing scripts.\n\nThe last argument is always considered to be the file portion. Since \"catfile()\" uses\n\"catdir()\" (see above) for the concatenation of the directory portions (if any), the following\nwith regard to relative and absolute paths is true:\n\ncatfile(\"\")     = \"\"\ncatfile(\"file\") = \"file\"\n\nbut\n\ncatfile(\"\",\"\")        = rootdir()         # (e.g. \"HD:\")\ncatfile(\"\",\"file\")    = rootdir() . file  # (e.g. \"HD:file\")\ncatfile(\"HD:\",\"file\") = \"HD:file\"\n\nThis means that \"catdir()\" is called only when there are two or more arguments, as one might\nexpect.\n\nNote that the leading \":\" is removed from the filename, so that\n\ncatfile(\"a\",\"b\",\"file\")  = \":a:b:file\"    and\n\ncatfile(\"a\",\"b\",\":file\") = \":a:b:file\"\n\ngive the same answer.\n\nTo concatenate *volume names*, *directory paths* and *filenames*, you are encouraged to use\n\"catpath()\" (see below).\n\ncurdir\nReturns a string representing the current directory. On Mac OS, this is \":\".\n\ndevnull\nReturns a string representing the null device. On Mac OS, this is \"Dev:Null\".\n\nrootdir\nReturns the empty string. Mac OS has no real root directory.\n\ntmpdir\nReturns the contents of $ENV{TMPDIR}, if that directory exits or the current working directory\notherwise. Under MacPerl, $ENV{TMPDIR} will contain a path like \"MacintoshHD:Temporary\nItems:\", which is a hidden directory on your startup volume.\n\nupdir\nReturns a string representing the parent directory. On Mac OS, this is \"::\".\n\nfilenameisabsolute\nTakes as argument a path and returns true, if it is an absolute path. If the path has a\nleading \":\", it's a relative path. Otherwise, it's an absolute path, unless the path doesn't\ncontain any colons, i.e. it's a name like \"a\". In this particular case, the path is considered\nto be relative (i.e. it is considered to be a filename). Use \":\" in the appropriate place in\nthe path if you want to distinguish unambiguously. As a special case, the filename '' is\nalways considered to be absolute. Note that with version 1.2 of File::Spec::Mac, this does no\nlonger consult the local filesystem.\n\nE.g.\n\nFile::Spec->filenameisabsolute(\"a\");         # false (relative)\nFile::Spec->filenameisabsolute(\":a:b:\");     # false (relative)\nFile::Spec->filenameisabsolute(\"MacintoshHD:\");\n# true (absolute)\nFile::Spec->filenameisabsolute(\"\");          # true (absolute)\n\npath\nReturns the null list for the MacPerl application, since the concept is usually meaningless\nunder Mac OS. But if you're using the MacPerl tool under MPW, it gives back $ENV{Commands}\nsuitably split, as is done in :lib:ExtUtils:MMMac.pm.\n\nsplitpath\n($volume,$directories,$file) = File::Spec->splitpath( $path );\n($volume,$directories,$file) = File::Spec->splitpath( $path,\n$nofile );\n\nSplits a path into volume, directory, and filename portions.\n\nOn Mac OS, assumes that the last part of the path is a filename unless $nofile is true or a\ntrailing separator \":\" is present.\n\nThe volume portion is always returned with a trailing \":\". The directory portion is always\nreturned with a leading (to denote a relative path) and a trailing \":\" (to denote a\ndirectory). The file portion is always returned *without* a leading \":\". Empty portions are\nreturned as empty string ''.\n\nThe results can be passed to \"catpath()\" to get back a path equivalent to (usually identical\nto) the original path.\n\nsplitdir\nThe opposite of \"catdir()\".\n\n@dirs = File::Spec->splitdir( $directories );\n\n$directories should be only the directory portion of the path on systems that have the concept\nof a volume or that have path syntax that differentiates files from directories. Consider\nusing \"splitpath()\" otherwise.\n\nUnlike just splitting the directories on the separator, empty directory names (\"\") can be\nreturned. Since \"catdir()\" on Mac OS always appends a trailing colon to distinguish a\ndirectory path from a file path, a single trailing colon will be ignored, i.e. there's no\nempty directory name after it.\n\nHence, on Mac OS, both\n\nFile::Spec->splitdir( \":a:b::c:\" );    and\nFile::Spec->splitdir( \":a:b::c\" );\n\nyield:\n\n( \"a\", \"b\", \"::\", \"c\")\n\nwhile\n\nFile::Spec->splitdir( \":a:b::c::\" );\n\nyields:\n\n( \"a\", \"b\", \"::\", \"c\", \"::\")\n\ncatpath\n$path = File::Spec->catpath($volume,$directory,$file);\n\nTakes volume, directory and file portions and returns an entire path. On Mac OS, $volume,\n$directory and $file are concatenated. A ':' is inserted if need be. You may pass an empty\nstring for each portion. If all portions are empty, the empty string is returned. If $volume\nis empty, the result will be a relative path, beginning with a ':'. If $volume and $directory\nare empty, a leading \":\" (if any) is removed form $file and the remainder is returned. If\n$file is empty, the resulting path will have a trailing ':'.\n\nabs2rel\nTakes a destination path and an optional base path and returns a relative path from the base\npath to the destination path:\n\n$relpath = File::Spec->abs2rel( $path ) ;\n$relpath = File::Spec->abs2rel( $path, $base ) ;\n\nNote that both paths are assumed to have a notation that distinguishes a directory path (with\ntrailing ':') from a file path (without trailing ':').\n\nIf $base is not present or '', then the current working directory is used. If $base is\nrelative, then it is converted to absolute form using \"rel2abs()\". This means that it is taken\nto be relative to the current working directory.\n\nIf $path and $base appear to be on two different volumes, we will not attempt to resolve the\ntwo paths, and we will instead simply return $path. Note that previous versions of this module\nignored the volume of $base, which resulted in garbage results part of the time.\n\nIf $base doesn't have a trailing colon, the last element of $base is assumed to be a filename.\nThis filename is ignored. Otherwise all path components are assumed to be directories.\n\nIf $path is relative, it is converted to absolute form using \"rel2abs()\". This means that it\nis taken to be relative to the current working directory.\n\nBased on code written by Shigio Yamaguchi.\n\nrel2abs\nConverts a relative path to an absolute path:\n\n$abspath = File::Spec->rel2abs( $path ) ;\n$abspath = File::Spec->rel2abs( $path, $base ) ;\n\nNote that both paths are assumed to have a notation that distinguishes a directory path (with\ntrailing ':') from a file path (without trailing ':').\n\nIf $base is not present or '', then $base is set to the current working directory. If $base is\nrelative, then it is converted to absolute form using \"rel2abs()\". This means that it is taken\nto be relative to the current working directory.\n\nIf $base doesn't have a trailing colon, the last element of $base is assumed to be a filename.\nThis filename is ignored. Otherwise all path components are assumed to be directories.\n\nIf $path is already absolute, it is returned and $base is ignored.\n\nBased on code written by Shigio Yamaguchi.\n"
                    }
                ]
            },
            "AUTHORS": {
                "content": "See the authors list in *File::Spec*. Mac OS support by Paul Schinder <schinder@pobox.com> and\nThomas Wegner <wegnerthomas@yahoo.com>.\n",
                "subsections": []
            },
            "COPYRIGHT": {
                "content": "Copyright (c) 2004 by the Perl 5 Porters. All rights reserved.\n\nThis program is free software; you can redistribute it and/or modify it under the same terms as\nPerl itself.\n",
                "subsections": []
            },
            "SEE ALSO": {
                "content": "See File::Spec and File::Spec::Unix. This package overrides the implementation of these methods,\nnot the semantics.\n",
                "subsections": []
            }
        }
    }
}