use File::Basename; $fullname = "/usr/local/src/perl-5.6.1.tar.gz"; $file = basename($fullname); # file="perl-5.6.1.tar.gz" $dir = dirname($fullname); # dir="/usr/local/src"($file,$dir,$ext) = fileparse($fullname, qr/..*/); # dir="/usr/local/src/" file="perl-5" ext=".6.1.tar.gz" ($file,$dir,$ext) = fileparse($fullname, qr/.[^.]*/); # dir="/usr/local/src/" file="perl-5.6.1.tar" ext=".gz" ($file,$dir,$ext) = fileparse($fullname, qr/.D.*/); # dir="/usr/local/src/" file="perl-5.6.1" ext=".tar.gz" ($file,$dir,$bak) = fileparse("/tmp/file.bak", qr/~+$/, qr/.(bak|orig|save)/) # dir="/tmp/" file="file" ext=".bak" ($file,$dir,$bak) = fileparse("/tmp/file~", qr/~+$/, qr/.(bak|orig|save)/) # dir="/tmp/" file="file" ext="~"
The File::Basename
module provides functions
to parse pathnames into their individual components. The
dirname
function pulls out the directory portion
and basename
the nondirectory portion. The more
elaborate fileparse
function picks out the full
pathname into the directory name, the filename, and the suffix; you
must supply a list of regular expressions describing the suffixes that
interest you. The examples above illustrate how choice of suffix
patterns affects the result. By default, these functions parse
pathnames according to the native conventions of your current
platform. The fileparse_set_fstype
function selects
a different platform's parsing rules, such as
fileparse_set_fstype("VMS")
to parse names using
VMS rules, even when running on non-VMS systems.