这是Perl智能匹配的预期行为吗?

Eri*_*sum 2 regex perl

### Code Here ###

use 5.012;
use warnings;
my @a = (1, 'Ah');

say (@a ~~ /^1$/ ? 'TRUE' : 'FALSE');
say ('1' ~~ @a ? 'TRUE' : 'FALSE');
say (@a ~~ "Ah" ? 'TRUE' : 'FALSE');
say (@a ~~ /^Ah$/ ? 'TRUE' : 'FALSE');

### STDOUT ###

TRUE
TRUE
FALSE
TRUE
Run Code Online (Sandbox Code Playgroud)

这些都不应该通过吗?

Eev*_*vee 5

Smartmatch的行为通常由操作数的类型决定; 它不对称.将阵列保持在右侧,您应该看到您期望的行为.

来自perlop:

它通常最好大声朗读为"in","inside of"或"包含在"中,因为左操作数通常在右操作数查找.这使得智能匹配操作数的操作数顺序通常与常规匹配运算符的顺序相反.换句话说,"较小"的东西通常放在左操作数中,而较大的东西放在右边.

给这个读一遍,老实说这个行为看起来有点离奇和不可预测,我将它的使用限制在记录良好的辅助函数或极其微不足道的情况下.

  • 现在已经有很多文献证明是实验性的:) (4认同)