Perl编程进阶:特性、模块与未来方向
1. 原型的实用用途
Ben Tilly提出了原型的一个实用用途:定义自定义命名函数用于排序。示例代码如下:
sub length_sort ($$) {
my ($left, $right) = @_;
return length($left) <=> length($right);
}
my @sorted = sort length_sort @unsorted;
这里的 $$
原型会强制Perl将排序对传递到 @_
中。虽然 sort
文档指出,这比使用包全局变量 $a
和 $b
稍慢,但使用词法变量通常能弥补速度上的损失。
2. 方法与函数的等价性
2.1 Perl对象系统特点
Perl的对象系统设计得较为精简。类就是包,Perl不会区分存储在包中的函数和方法,都使用 sub
来声明。可以将函数作为方法调用,也可以手动传入调用者,像调用函数一样调用方法。
2.2 调用方问题
考虑一个包含多个方法的类 Order
:
package Order {
use List::Util 'sum';
sub calculate_p