每天学习 Perl 多一点

分类: 计算机技术 | 由 zhang发布于

当你觉得你已经了解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

发表看法