许多年前,我记得一位程序员同事这样建议:
new Some::Class; # bad! (but why?)
Some::Class->new(); # good!
可悲的是,现在我不记得/他的原因了。:( 即使构造函数实际上并不存在于 Some::Class 模块中,而是从某处的父级继承,这两种形式都可以正常工作。
这两种形式都与 Some::Class::new() 不同,后者不会将类的名称作为第一个参数传递给构造函数——所以这种形式总是不正确的。
即使这两种形式是等价的,我发现 Some::Class->new() 更清楚,因为它遵循在模块上调用方法的标准约定,而在 perl 中,'new' 方法不是特别 - 构造函数可以被称为任何东西,并且 new() 可以做任何事情(当然我们通常期望它是一个构造函数)。