File::Basename − Parse file paths into directory, filename and suffix.


    use File::Basename;
    ($name,$path,$suffix) = fileparse($fullname,@suffixlist);
    $name = fileparse($fullname,@suffixlist);
    $basename = basename($fullname,@suffixlist);
    $dirname  = dirname($fullname);


These routines allow you to parse file paths into their directory, filename and suffix.

NOTE : "dirname()" and "basename()" emulate the behaviours, and quirks, of the shell and C functions of the same name. See each function’s documentation for details. If your concern is just parsing paths it is safer to use File::Spec’s "splitpath()" and "splitdir()" methods.

It is guaranteed that

    # Where $path_separator is / for Unix, \ for Windows, etc...
    dirname($path) . $path_separator . basename($path);

is equivalent to the original path for all systems but VMS .

    my($filename, $directories, $suffix) = fileparse($path);
    my($filename, $directories, $suffix) = fileparse($path, @suffixes);
    my $filename                         = fileparse($path, @suffixes);

The "fileparse()" routine divides a file path into its $directories, $filename and (optionally) the filename $suffix.

$directories contains everything up to and including the last directory separator in the $path including the volume (if applicable). The remainder of the $path is the $filename.

     # On Unix returns ("baz", "/foo/bar/", "")
     # On Windows returns ("baz", 'C:\foo\bar\', "")
     # On Unix returns ("", "/foo/bar/baz/", "")

If @suffixes are given each element is a pattern (either a string or a "qr//") matched against the end of the $filename. The matching portion is removed and becomes the $suffix.

     # On Unix returns ("baz", "/foo/bar/", ".txt")
     fileparse("/foo/bar/baz.txt", qr/\.[^.]*/);

If type is non-Unix (see "fileparse_set_fstype()") then the pattern matching for suffix removal is performed case-insensitively, since those systems are not case-sensitive when opening existing files.

You are guaranteed that "$directories . $filename . $suffix" will denote the same location as the original $path.


    my $filename = basename($path);
    my $filename = basename($path, @suffixes);

This function is provided for compatibility with the Unix shell command basename(1). It does NOT always return the file name portion of a path as you might expect. To be safe, if you want the file name portion of a path use "fileparse()".

"basename()" returns the last level of a filepath even if the last level is clearly directory. In effect, it is acting like "pop()" for paths. This differs from "fileparse()"’s behaviour.

    # Both return "bar"

@suffixes work as in "fileparse()" except all regex metacharacters are quoted.

    # These two function calls are equivalent.
    my $filename = basename("/foo/bar/baz.txt",  ".txt");
    my $filename = fileparse("/foo/bar/baz.txt", qr/\Q.txt\E/);

Also note that in order to be compatible with the shell command, "basename()" does not strip off a suffix if it is identical to the remaining characters in the filename.


This function is provided for compatibility with the Unix shell command dirname(1) and has inherited some of its quirks. In spite of its name it does NOT always return the directory name as you might expect. To be safe, if you want the directory name of a path use "fileparse()".

Only on VMS (where there is no ambiguity between the file and directory portions of a path) and AmigaOS (possibly due to an implementation quirk in this module) does "dirname()" work like "fileparse($path)", returning just the $directories.

    # On VMS and AmigaOS
    my $directories = dirname($path);

When using Unix or MSDOS syntax this emulates the dirname(1) shell function which is subtly different from how "fileparse()" works. It returns all but the last level of a file path even if the last level is clearly a directory. In effect, it is not returning the directory portion but simply the path one level up acting like "chop()" for file paths.

Also unlike "fileparse()", "dirname()" does not include a trailing slash on its returned path.

    # returns /foo/bar.  fileparse() would return /foo/bar/
    # also returns /foo/bar despite the fact that baz is clearly a
    # directory.  fileparse() would return /foo/bar/baz/
    # returns '.'.  fileparse() would return 'foo/'

Under VMS , if there is no directory information in the $path, then the current default device and directory is used.


  my $type = fileparse_set_fstype();
  my $previous_type = fileparse_set_fstype($type);

Normally File::Basename will assume a file path type native to your current operating system (ie. /foo/bar style on Unix, \foo\bar on Windows, etc...). With this function you can override that assumption.

Valid $types are "MacOS", " VMS ", "AmigaOS", " OS2 ", " RISCOS ", "MSWin32", " DOS " (also " MSDOS " for backwards bug compatibility), "Epoc" and "Unix" (all case-insensitive). If an unrecognized $type is given "Unix" will be assumed.

If you’ve selected VMS syntax, and the file specification you pass to one of these routines contains a "/", they assume you are using Unix emulation and apply the Unix syntax rules instead, for that function call only.


dirname(1), basename(1), File::Spec

More Linux Commands

pgmtoy4m(1) - Convert mpeg2dec pgm and pgmpipe output to YUV
pgmtoy4m repacks the PGM output from mpeg2dec into YUV4MPEG2 4:2:0p. No actual changes to the data are made. The data is unpacked from the quasi-PGM format and

sane-sceptre(5) - SANE backend for SCEPTRE scanners.........
The sane-sceptre library implements a SANE (Scanner Access Now Easy) backend that provides access to Sceptre flatbed scanners. This backend should be considered

tcl_traceCompile(n) Variables used by Tcl __________________
The following global variables are created and managed automatically by the Tcl library. Except where noted below, these variables should normally be treated as

systemd-suspend.service(8) System sleep state logic.........
systemd-suspend.service is a system service that is pulled in by and is responsible for the actual system suspend. Similarly, systemd-hibernate.s

realpath(3) - return the canonicalized absolute pathname....
realpath() expands all symbolic links and resolves references to /./, /../ and extra / characters in the null-terminated string named by path to produce a canon

xdg-desktop-icon(1) - command line tool for (un)installing i
The xdg-desktop-icon program can be used to install an application launcher or other file on the desktop of the current user. An application launcher is represe

XOpenDevice(3) - open or close an extension input device....
The XOpenDevice request makes an input device accessible to a client through input extension protocol requests. If successful, it returns a pointer to an XDevic

gcc-4.8(1) GNU project C and C compiler - Linux manual page
When you invoke GCC, it normally does preprocessing, compilation, assembly and linking. The overall options allow you to stop this process at an intermediate st

podofoxmp(1) Modify or extract XMP information from a PDF fi
podofoxmp is one of the command line tools from the PoDoFo library that provide several useful operations to work with PDF files. It can extract or modify XMP i

malloc_set_state(3) record and restore state of malloc imple
The malloc_get_state() function records the current state of all malloc(3) internal bookkeeping variables (but not the actual contents of the heap or the state

sane-u12(5) - SANE backend for Plustek USB flatbed scanners,
The sane-u12 library implements a SANE (Scanner Access Now Easy) backend that provides access to USB flatbed scanners based on Plusteks ASIC 98003 (parallel-por

vorbiscomment(1) - List or edit comments in Ogg Vorbis files
vorbiscomment Reads, modifies, and appends Ogg Vorbis audio file metadata tags. OPTIONS -a, --append Append comments. -c file, --commentfile file Take comments

We can't live, work or learn in freedom unless the software we use is free.