Regex Perl不区分大小写的正则表达式不工作

Regex Perl不区分大小写的正则表达式不工作,regex,perl,Regex,Perl,以下是整个脚本: #!/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 第一种情况匹配,第二种情况不匹配。我做错了什么?绑定操作符=~的字符串在左边,正则表达式在右边 这很奇怪。这有什么关系 在大多数算子中,参数的顺序是重要的;交换算子是罕见

以下是整个脚本:

#!/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

第一种情况匹配,第二种情况不匹配。我做错了什么?

绑定操作符
=~
的字符串在左边,正则表达式在右边

这很奇怪。这有什么关系

在大多数算子中,参数的顺序是重要的;交换算子是罕见的

  • 2/3
    3/2
  • 2-3
    3-2
  • 2>3
    3>2
  • 2
    ^
    ge
    gt
    le
    lt
    x
    |
    ~
    。这还没有提到具有多个参数的命名运算符,它们也可以作为函数,例如
    拆分
    拼接
    连接
    打开
    等。综合考虑所有因素,我很惊讶你会发现
    =~
    是不可交换的

    如果顺序不正确,为什么案例1有效而案例2无效

    因为在
    $reg=~“test”
    中,Perl将
    $reg
    强制为字符串,给出
    (?^ui:test)
    ,将字符串强制为正则表达式,给出
    qr/test/
    。的确如此

    say "matched 1" if "(?^ui:test)" =~ /test/;
    
    这是成功的,因为
    (?^ui:test)
    确实包含
    test
    。但是它不包含
    Test
    so

    say "matched 1" if "(?^ui:test)" =~ /Test/
    

    不打印任何奇怪的内容。如果顺序错误,为什么案例1有效,而案例2无效?无论如何,谢谢。因为案例1被解释为
    (?^ui:test)=~/test/
    ,而第二个被解释为
    (?^ui:test)=~/test/
    。在中搜索“字符串化”。参数的顺序对
    ==
    eq
    很重要?因为那是我的误解。我像一个等式操作符一样看
    =~
    ,但(我现在看到)它不是。
    say "matched 1" if "(?^ui:test)" =~ /Test/