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)。