File:Basename module
=1= use File::Basename;
=2= use File::Basename qw/basename, dirname, fileparse/
=3= use File::Basename qw/basename/;
=4= use File::Basename qw//;
=5= use File::Basename ();
1、使用说明
(1)File::Basename模块有三个参数,basename提取的是最后一个斜线(/)之后的内容,dirname提取的是最后一个斜线(/)之前的内容,前面的俗称文件名,后面的俗称文件路径。Fileparse提取的是文件名后缀,需要事先指定,比如 .pl .txt .gz.
(2)=1=和=2=等价,是最常用的情况,当调用File::Basename模块时,同时引入了三个函数。要是不想引入函数或者只引入某个函数,那么就是情况=3,4,5=了,请注意=1=和=5=的区别。
注:为了以后调用方面,在什么情况下都不使用三个函数名是可取的,那么就可以大胆的使用=1=,不过后面的几种情况要明白,有时候要看别人的程序,不至于不懂是什么意思。
(3)=4,5=的情况下,调用函数要用全称,如:
my $name = “/usr/local/bin/perl”;
my $basename=File::Basename::basename $name;
my $dirname = File::Basename::dirname $name;
注:主意区分模块中的大小写,写错了可就麻烦了,比如use File::Basename;写成use File::basename;调用就要失败了。
2、使用实例
(1)代码
#!/usr/bin/perl
use strict;
use warnings;
use File::Basename;
my $fullname = '/ifs5/ST_COMG/USER/yanzengli/other/perl.debug.pl';
my @suffixlist = qw(.exe .pl .txt);
my ($name, $path, $suffix) = fileparse ($fullname, @suffixlist);
print "name = $name\n";
print "path = $path\n";
print "suffix = $suffix\n";
$name = fileparse ( $fullname, @suffixlist);
print "name = $name\n";
my $Basename = basename ( $fullname, @suffixlist );
print "Basename = $Basename\n";
my $dirname = dirname ($fullname);
print "dirname = $dirname\n";
====out
name = perl.debug
path = /ifs5/ST_COMG/USER/yanzengli/other/
suffix = .pl
name = perl.debug
Basename = perl.debug
dirname = /ifs5/ST_COMG/USER/yanzengli/other
(2)代码功能
从一个路径中提取文件路径、文件名和文件后缀。
(3)注意事项
@--@后缀没有匹配上时,fileparse和basename提取的内容是一样的,都是最后一个斜线后面的内容,但是fileparse和dirname提取的内容会差一个”/”,这个是要小心的内容,perldoc并没有说明这一点。这个可以用以下语句实验一下:
my $fullname = '/ifs5/ST_COMG/USER/yanzengli/other/perl.debug.pl.gz';
@--@后缀匹配上的时候,也就是源代码的情况。fileparse和basename提取的内容是一致的,但是不是斜线后面的全部内容,是去掉匹配上的后缀后的内容。这个也是要小心的。fileparse和basename和没有匹配上情况一致。还有一个是后缀,事先list然后提取,不list和没有匹配上的情况是一致的。
reference:参考了perl中国上的内容(http://www.perlcn.com/perlbc/perljj/346.html)。