这个模块的功能是将 文件路径解析为 目录、文件名和文件扩展名。
这个模块下有四个函数可供调用: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()函数。
- 当在VMS和AmigaOS下时,dirname只返回目录名,这个结果与fileparse返回的$dir相同。
- 当在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语法规则对此次函数调用进行处理,并且这种处理仅限于该当次函数调用。