smartmatch 运算符未按预期工作

The smartmatch operator is not working as expected

为什么智能匹配运算符 ~~0 不在 (0, 5..100) 中?

print ((0 ~~ (0, 5..100)) ? "Y" : "N");

N

测试一下here

将右侧设为数组引用

print ((0 ~~ [0, 5..100]) ? "Y" : "N");

或命名数组

@a = (0, 5..100);
print ((0 ~~ @a) ? "Y" : "N");

或者一个...不管它叫什么(匿名命名数组?)

print ((0 ~~ @{[0,5..100]}) ? "Y" : "N");

(0,5..100)是列表但不是数组,这是区分重要的地方之一。

不要使用损坏的智能匹配运算符。 0 ~~ ... 是它被认为损坏的具体原因之一。

使用

grep { $_ } 0, 5..100

use List::Util qw( first );

first { $_ } 0, 5..100