分类: 计算机技术 |
由 zhang发布于 08月 24th, 2007
当你觉得你已经了解Perl的一切的时候,总会有一些你不知道的东西跳出来。
如下的类似代码你写过几次?
my $filename = "/path/to/file.txt";
my @dir_parts = split('/', $filename);
my $file = pop( @dir_parts );
my $path = join('/', @dir_parts );
或者
my ($name) = $filename =~ s/\/(.*?)$/o;
当我知道有 File::Basename 模块存在的时候, 它还不属于Perl的核心模块。但现在已经是Perl的标准模块了,做上面的事情已经是小菜一碟了:
use File::Basename;
# 只取文件名
my $filename_only = basename($filename);
# 只取路径部分
my $path_only = dirname($filename);
这个模块中提供的fileparse()函数会给你更奇妙的功能:
my ($base, $path, $suffix) = fileparse( $filename );
将会在$base只存放文件名, $path中存放路径, $suffix中为空. 这是因为我们没有提供任何正则表达式来匹配。
相反,如果我们用:
my ($base, $path, $suffix) = fileparse( $filename, qr{\.txt} );
然后我们对 $filename = '/home/frank/test.txt' 和
$filename2 = '/home/frank/test.doc' 来运行程序,将会得到如下结果:
Base: test
Path: /home/frank
Type: .txt
和
Base: test.doc
Path: /home/frank
Type:
如果传递给fileparse()的$filename与指定模式不匹配,那么这部分就不会从basename上剥离下来。
这里就是想说,无论你用Perl多久,或者觉得你知道得多么多,总有一些东西你还不知道。
http://blog.revsys.com/2006/04/learn_something.html
我的相关文章:
最近阅读过此文章的网友:
Trackback url : u can trackback from your own site
发表看法