为什么Perl中不推荐使用Switch模块?

时间:2010-04-13 14:54:44

标签: perl module switch-statement

为什么Switch模块deprecated in Perl 5.12

我知道用switch制作case / elsif,但我不太喜欢。

3 个答案:

答案 0 :(得分:24)

Perl 5.10引入了a real switch called given-when

旧的Switch使用了source filtering,还有其他limitations

答案 1 :(得分:17)

原始Switch使用源过滤器来完成其工作,这通常是一个坏主意。从本质上讲,它会预处理您的文字源,以便在perl编译之前创建新代码。该模块从来没有真正意图被大量使用,它更像是一个概念证明,可以弄清楚真正的Perl功能是什么样的。

Perl 5.10添加了given-when构造来完成大多数人想要的switch-case,但它确实做了很多。 Learning Perl, 5th Edition将整整一章用于智能匹配。但是,在 Learning Perl 第7版中,我们删除了该章,因为自v5.18起智能匹配是实验性的。

您不能使用given-when构造制作Perl if-elsif-elsegiven-when允许您执行多个块,以及添加插页式广告代码。使用if-elsif-else,您只执行一个分支。

答案 2 :(得分:1)

首先,不推荐使用Switch。它的包含在核心中已在5.12中弃用。所有这一切都意味着虽然Switch与Perl 5.8和5.10捆绑在一起,但它并没有捆绑在Perl 5.14和更新版本中。这并不意味着人们应该停止使用该模块。该模块仍可以从CPAN单独安装perl

请注意,包括我自己在内的许多人建议其他人不要使用Switch,但这与其对核心的弃用无关,而且远远早于5.12。使用Switch可能会导致非常奇怪且难以调试的错误,因为它会在Perl看到之前修改您的代码,同时提供最小的好处(如果有的话)。

由于这个原因,并且由于Perl开始提供原生替代方案(given - when),因此决定不再将Switch与perl捆绑在一起。

不幸的是,given - when存在问题,并在5.18中追溯标记为实验性。使用这些是不安全的,因为将来will以向后不兼容的方式(或可能被删除)进行更改。