File::Basename 模块

这个模块的功能是将 文件路径解析为 目录、文件名和文件扩展名。

这个模块下有四个函数可供调用:fileparse、basename、dirname、fileparse_set_fstype。

fileparse

语法

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

功能

fileparse 函数对文件路径($path)进行解析得到文件所在目录($dirs)、文件名($filename)和文件扩展名($suffix)。

如果给了参数@suffixes,则@suffixes中的元素(是一个字符串或一个qr//形式的正则表达式)用于匹配得到文件的扩展名。

fileparse 在列表上下文返回的是一个列表:($filename, $dirs, $suffix) ;在标题上下文件返回的是$filename。

例子

# On Unix returns ("baz", "/foo/bar/", "")
fileparse("/foo/bar/baz");

# On Windows returns ("baz", 'C:\foo\bar\', "")
fileparse('C:\foo\bar\baz');

# On Unix returns ("", "/foo/bar/baz/", "")
fileparse("/foo/bar/baz/");

basename

语法

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

功能

这个函数提供的功能与Unix shell命令中的 basename(1)相兼容。它并不总是返回文件名。如果你想要总是得到文件名请在标量上下文中使用fileparse()函数。

basename()返回文件路径的最后一个层级,可能是文件名,也可能是目录名。这与fileparse的行为是不同的。

# Both return "bar"
basename("/foo/bar");
basename("/foo/bar/");

在basename方法中@suffixes参数中的元素是不能使用正则的,所有元素必须为字符串。

# 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/);

还要注意,为了与shell命令兼容,basename()如果文件名中有扩展名,则扩展名会作为文件名的一部分。

dirname

my $dirs = dirname($path);

这个函数提供的功能与Unix shell命令中的 dirname(1)相兼容。它并不总是返回目录名。如果你想要总是得到目录名请在列表上下文中使用fileparse()函数。

  1. 当在VMS和AmigaOS下时,dirname只返回目录名,这个结果与fileparse返回的$dir相同。
  2. 当在Unix和MSDOS下时,它会模拟dirname(1) shell 函数,这时他fileparse的结果不同。返回的是$path中除去最后一个层级余下的部分。

还有一点与fileparse的不同是,dirname返回的目录名不包括结尾的斜线。

# returns /foo/bar.  fileparse() would return /foo/bar/
dirname("/foo/bar/baz");

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

# returns '.'.  fileparse() would return 'foo/'
dirname("foo/");

fileparse_set_fstype

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

通常File :: Basename将假定您当前操作系统为本机的文件路径类型(例如,Unix上的/ foo / bar样式,Windows上的\ foo \ bar等)。使用此函数,您可以覆盖该假设。

有效的类型有:“MacOS”,“VMS”,“AmigaOS”,“OS2”,“RISCOS”,“MSWin32”,“DOS”(还有用于向后兼容的“MSDOS”),“Epoc”和“Unix”(不区分大小写)。如果给出一个无法识别的类型,将假定其为“Unix”。

如果您选择了VMS语法,并且传递给其中一个包含一个“/”的$path,那么File::Basename模块将假设您正在使用Unix仿真,这时它会应用Unix语法规则对此次函数调用进行处理,并且这种处理仅限于该当次函数调用。

你可能感兴趣的:(File::Basename 模块)