以下是整个脚本:
#!/usr/bin/perl
use v5.14; use warnings;
my $reg = qr/test/i;
say "matched 1" if $reg =~ "test"; # matches
say "matched 2" if $reg =~ "Test"; # no match
第一种情况匹配,第二种情况不匹配。我做错了什么?
答案 0 :(得分:7)
绑定操作符=~
在左侧上有字符串,在右侧正则表达式 / em>的
"test" =~ $reg;
答案 1 :(得分:2)
这很奇怪。为什么会这么重要?
大多数运营商的参数顺序都很重要;交换运营商很少见。
2 / 3
与3 / 2
2 - 3
与3 - 2
2 > 3
与3 > 2
2 << 3
与3 << 2
$x = 2
与2 = $x
我显然可以继续。同样的事情也适用于!=
,!~
,%
,&&
,*
,**
,*=
,{{1 }},+
,+=
,,
,-
,-=
,->
,.
,..
,...
,/
,//
,<
,<<
,<=
,=
,=>
,{ {1}},=~
,>
,>=
,>>
,^
,and
,ge
,{{1 },gt
,le
,lt
和or
。并且没有提到具有多个参数的命名运算符,这些参数也表现为函数,例如x
,||
,~~
,split
等。所有事情都考虑在内,我感到惊讶你发现splice
是非交换性的
为什么案例1会起作用,但如果案件2的顺序错误则不是案例2?
因为在join
中,Perl将open
强制转换为字符串,将=~
和字符串强制转换为正则表达式,并赋予$reg =~ "test"
。所以它确实
$reg
这是成功的,因为(?^ui:test)
确实包含qr/test/
。但是不包含say "matched 1" if "(?^ui:test)" =~ /test/;
所以
(?^ui:test)
什么都不打印