在我写的最后一个脚本中,我需要一种类似于 switch 语句行为的行为。在 Perl 中对等价物的简单搜索使我使用 Switch
。一开始,一切都很好并且可以正常工作,直到一切都崩溃并出现了描述性不强的错误(它发生在一个带有正则表达式的 switch 语句上,但奇怪的是它没有发生在其他类似的 switch 语句上)。
编辑: 崩溃的代码看起来像这样:
switch ($var) {
case /pattern1/ {...}
case /pattern2/ {...}
...
else {...}
}
这导致我放弃使用 Switch.pm
并寻找替代方案。
我找到了 given
和 for-when
,当然还有一些直截了当又有些天真的 if-elsif-else
。
- 为什么
Switch.pm
如此不稳定? - 看起来
given
和for-when
有相似的结构,但我想还是有区别的(因为两者都存在)。这是什么? if-elsif-else
是否比其他选项慢很多?
最佳答案
Perl 的 when
和智能匹配是实验性的,它们 won't成为没有向后不兼容更改的功能。你不应该使用这些。
Switch.pm是一个源过滤器,所以当出现问题时它会产生不正确的错误消息。它也遇到与智能匹配相同的问题。你不应该使用它。
因此,在您列出的选项中,只有一个可行,而且一点也不慢!
关于perl - Perl 中的 switch vs. given vs. for-when vs. if-elsif-else,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38858850/