逆向生成可读性更强的代码

ZDNet软件频道 时间:2004-02-16 作者:ZDNet China |  我要评论()
本文关键词:perltips
有的时候,事情反过来做会更容易一些。Perl的reverse(逆向)函数能够在下面的情况下提供一些帮助。
本文译自Builder.com,未经许可请勿转载 有的时候,事情反过来做会更容易一些。Perl的reverse(逆向)函数能够在下面的情况下提供一些帮助。

Reverse,在用到字符串里的时候,会返回一个其字符以相反方向排列的字符串。例如,使用reverse会把“abc”返回为“cba”。当reverse用在列表里的时候,它会以相反的顺序返回元素。它也常常和sort(排序函数)一起使用,将排序的序列反转过来。

想一想一个数字每三个数位(digit)就放一个逗号的情况。如果没有使用reverse的话,代码就可能会像下面这样:

my ($whole, $frac) = split /./, $number, 2;
1 while ($whole =~ s/(?<=d)(d)(?=,|$)/,/);
$number = join('.', $whole, $frac);

逗号应该放在从右侧起每三个数位的前面。将数字颠倒过来,插入逗号,然后再把数字颠倒过来,这可能要更容易一些。

使用了reverse的代码阅读起来要容易得多。下面就是使用reverse实现相同功能的代码:

$number = reverse $number;
$number =~ s/(d)(?=d)(?!d*.)/,/g;
$number = reverse $number;

Reverse函数还让处理含有小数点的数字变得更容易了。在反转了数字之后,找到后面接有至少一个数位且在更靠后的地方不接有小数点的三个数位。在这三个数位后面插入一个逗号,然后重复此过程。最后把这个数字颠倒过来,以恢复到它原来的顺序。

如果你想使用look behind判断提示而不是reverse,那么这就是枉费心机。Look behind现在还不会允许可变宽度的判断提示。



责任编辑:李宁

欢迎评论投稿

百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134