perl - Perl 中的 switch vs. given vs. for-when vs. if-elsif-else

标签 perl if-statement switch-statement

在我写的最后一个脚本中,我需要一种类似于 switch 语句行为的行为。在 Perl 中对等价物的简单搜索使我使用 Switch。一开始,一切都很好并且可以正常工作,直到一切都崩溃并出现了描述性不强的错误(它发生在一个带有正则表达式的 switch 语句上,但奇怪的是它没有发生在其他类似的 switch 语句上)。

编辑: 崩溃的代码看起来像这样:

switch ($var) {
    case /pattern1/ {...}
    case /pattern2/ {...}
    ...
    else {...}
}

这导致我放弃使用 Switch.pm 并寻找替代方案。

我找到了 givenfor-when,当然还有一些直截了当又有些天真的 if-elsif-else

  1. 为什么 Switch.pm 如此不稳定?
  2. 看起来 givenfor-when 有相似的结构,但我想还是有区别的(因为两者都存在)。这是什么?
  3. 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/

相关文章:

java - 正确使用switch语句

angular - 单击开关更改颜色

perl - 生成包含条件项的列表

perl - 如何在 perl 脚本退出之前运行一段代码

java - 我如何做出 if 语句,如果一个是一对,另一个不是,则不幸运,但如果两者都是一对,则幸运?

PHP MYSQL 如果字段等于检查回显

JavaScript - 如果条件为真,则阻止将某些元素插入数组

java - 如何用正则表达式匹配字符串中的中间字符?

mysql - Perl 使用另一个数据库中的值更新 Oracle 数据库

Javascript switch 语句比较让我陷入困境