知者无忧

NOThing Is Impossible! —— 原创文章,谢绝转载!

RSS Feed

每天学习 Perl 多一点

0 Comments
Posted by on 2007-08-24 at 23:05

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

相关日志

  • 暂无相关日志

Filed under 计算机技术
You can leave a comment, or trackback from your own site.

0 Comments

You can be the first to comment!

发表评论

您的电子邮箱不会被公开。 标记为 * 的区域必须填写

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

功能

  • 登录
  • 日志 RSS
  • 评论 RSS
  • 中国博客网