发现这是一个旧的代码库,想知道它是否合法:if($ foo =〜“ bar”和“ baz”){

问题描述 投票:0回答:1

在旧的Perl代码库中,是这样:

if($ foo =〜“ bar” and“ baz”){

并且有效!如果我用更常见的定界符/代替引号,则它不起作用。有人认识这种语法吗?我找不到任何与绑定运算符一起使用“和”方式的讨论。如果我在第二个“ and”上进行链接,它也可以工作,但是如果我尝试“ and not”,则不起作用。我很惊讶地看到此代码,甚至更惊讶地看到它等效于:

如果($ foo =〜/ bar / && $ foo =〜/ baz /){

这是合法的语法吗?如果是,我在哪里可以找到它的文献记录?还是非常糟糕的形式并且需要重新加工?

perl string-matching
1个回答
0
投票
 if ( $foo =~ "bar" and "baz" )

等效于

 if ( ( $foo =~ "bar" ) and "baz" )

由于"baz"总是返回一个真值,所以上述等价于

 if ( $foo =~ "bar" )

例如,

use feature qw( say );

if ( $ARGV[0] =~ "bar" and "baz" ) {
   say "match";
} else {
   say "no match";
}

if ( $ARGV[0] =~ /bar/ && $ARGV[0] =~ /baz/ ) {
   say "match";
} else {
   say "no match";
}
$ perl a.pl oooooo
no match
no match

$ perl a.pl ooobarooo
match
no match

$ perl a.pl ooobazooo
no match
no match

$ perl a.pl ooobarbazooo
match
match

我不会称其为“有效”。

© www.soinside.com 2019 - 2024. All rights reserved.