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语法规则对此次函数调用进行处理,并且这种处理仅限于该当次函数调用。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,354评论 2 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,084评论 19 139
  • 1.创建文件夹 !/bin/sh mkdir -m 777 "%%1" 2.创建文件 !/bin/sh touch...
    BigJeffWang阅读 13,481评论 3 53
  • 1,在我小学的时候,成绩就非常差了,那时候,除了英语和语文被老师表扬过外,就没有受到表扬的了。到现在,我还记得我考...
    向上居士阅读 2,350评论 1 1
  • 原因一:没有安装jdk,只安装了jre jdk+jre才是完整的,如果没有安装jdk的话,在cmd里边输入java...
    古寒飞阅读 3,290评论 0 0

友情链接更多精彩内容