perl - 有没有办法在 perl if 语句中使用 <=> 运算符?

标签 perl if-statement

首先,我意识到我可以用这个操作符编写一个 if 语句来编译和运行。我想知道是否有一种方法可以用来制作 if/elsif/else block 更优雅一点。

我目前有一个看起来像这样的代码块

 if( $bill == $ted) {
        # Do some stuff
} elsif( $bill < $ted) {
        # Do different stuff
} else {
        # Do really weird stuff
}

因此,我希望脚本根据两个值是否相等或不相等(以较低者为准)来执行特定的操作。好像是 <=>运算符将非常适合此操作。

最佳答案

这有点晦涩,但您可以使用 <=>运算符获取调度表的元素:

(   sub { say 'they are the same' },
    sub { say 'x is greater' },
    sub { say 'x is lesser' }
)[$x <=> $y]->();

这是基于索引 -1 返回列表的最后一个元素这一事实。

使用散列可能更具可读性。

{    0 => sub { say 'they are the same' },
     1 => sub { say 'x is greater' },
    -1 => sub { say 'x is lesser' }
}->{ $x <=> $y }->();

关于perl - 有没有办法在 perl if 语句中使用 <=> 运算符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51084217/

相关文章:

perl - 未定义的子程序调用

perl - 命令 "cpan reports"到底是做什么的?

regex - 带管道的 Perl 正则表达式

javascript - "99 bottle of beer on the wall"代码不工作纯 js。 if 语句和 while 循环

mysql - 等价于三元运算符的SQL语句

mysql - Perl DBI/MySQL - 不能用于特定的浮点值

Perl 输出覆盖自身

excel - 使用 VBA 搜索特定的 headers 名称,并将这些 headers 的数据分组在几个重命名列中

java - If 语句导致应用程序崩溃

c - 编译器如何解释 `if(!(a=10))` ?