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现在还不会允许可变宽度的判断提示。