2

Perl 是一种支持按返回类型进行函数重载的语言。

一个简单的例子是wantarray()

CPAN 中很少有很好的模块可以扩展这个 wantarray() 并为许多其他返回类型提供重载。这些模块是Contextual::ReturnWant。不幸的是,我不能使用这些模块,因为这两个模块都无法通过 perl 版本 5.8.9 的 perl 评论家(我无法升级这个 perl 版本)。

所以,我正在考虑编写我自己的模块,例如 Contextual::Return 和 Want,但只需要很少的量。我试图理解 Contextual::Return 和 Want 模块代码,但我不是专家。

我只需要对返回类型 BOOL、OBJREF、LIST、SCALAR 进行函数重载。

请通过提供一些指导来帮助我,我该如何开始。

4

1 回答 1

6

以这种方式使用 Perl 语法的模块Contextual::Return几乎Want必然会违反Perl::Critic. 在这种情况下,主要的违规行为偶尔会禁用strict和使用子程序原型,这是最小的。

我个人认为这是一个愚蠢的规则,它坚持所有代码都必须毫无例外地通过任意一组测试,但我也认为任何行为因调用它的上下文而有很大不同的代码都可能设计得很糟糕并且难以理解和维护。很少看到甚至wantarray被使用,因为 Perl 通常会做正确的事情而无需您解释。

我认为您可能遇到了一个看起来很有趣的模块,并希望以某种方式将其合并到您的代码中。您能否通过展示一个需要您描述的全面上下文检查的子例程示例来改变我的想法?

于 2012-07-13T14:49:00.237 回答