Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 这是Perl智能匹配的预期行为吗?_Regex_Perl - Fatal编程技术网

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

Regex 这是Perl智能匹配的预期行为吗?,regex,perl,Regex,Perl,难道所有这些都不应该通过吗?Smartmatch的行为通常由正确操作数的类型决定;它不是对称的。将数组保持在右侧,您将看到预期的行为 发件人: 最好将其大声读出为“in”、“in of”或“is contained in”,因为左操作数通常在右操作数中查找。这使得操作数到smartmatch操作数的顺序通常与常规匹配运算符的顺序相反。换句话说,“较小”的对象通常放在左操作数中,较大的对象放在右操作数中 再仔细阅读一遍,老实说,这种行为似乎有点奇怪和不可预测,我会将它的使用限制在有良好文档记录的助

难道所有这些都不应该通过吗?

Smartmatch的行为通常由正确操作数的类型决定;它不是对称的。将数组保持在右侧,您将看到预期的行为

发件人:

最好将其大声读出为“in”、“in of”或“is contained in”,因为左操作数通常在右操作数中查找。这使得操作数到smartmatch操作数的顺序通常与常规匹配运算符的顺序相反。换句话说,“较小”的对象通常放在左操作数中,较大的对象放在右操作数中


再仔细阅读一遍,老实说,这种行为似乎有点奇怪和不可预测,我会将它的使用限制在有良好文档记录的助手函数或极为琐碎的情况下。

Smartmatch是一种微妙的野兽,Perl5实现可能存在缺陷——在5.18版本中,它被降级为实验状态

我们可以通过查看案例来确定选择哪种情况

  • @a~~~/^1$/
    具有类型
    ARRAY~~Regexp
    ,其描述为“任何数组元素都与Regexp.Like匹配:
    grep{/Regexp/}数组

  • '1'~@a
    具有类型
    Any~~ARRAY
    ,其描述为“smartmatch each ARRAY element.Like:
    grep{Any~~$}ARRAY
    ”。第二级智能匹配应使用
    Any~~Num
    Any~~Any
    案例

  • @a~~“Ah”
    可能有类型
    Any~~Any
    ,它可以进行字符串比较

  • @a~~/^Ah$/
    也是上面的正则表达式


最好通过查看正确的参数来理解smartmatch表。如果它是一个集合,则smartmatch是运算符中的一个
。如果是regex或coderef,则smartmatch的行为类似于应用程序。如果它是一个简单的标量,那么一个普通的比较(或者
==
或者
eq
)就完成了。

那么“啊”~@a”呢?
说(“啊”~@a?'TRUE':'FALSE')
will Pass你使用的是什么版本的Perl?你在代码中加入了“use v5.x”吗?但是后来我发现
参数“Ah”在smart match中不是数字的
我在上面添加了导入是的,我不得不同意它现在已经有很好的文档证明是实验性的:)有这么多的方法可以使用,还有一个像“smart”match这样不幸的名字,人们对它期望过高。该不良功能设置为失败。与其他复杂功能一样,如
pack
printf
,在使用时可能需要将文档放在手边,直到您完全熟悉为止。
### 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