perl - 发现这是一个旧代码库,想知道它是否合法: if ($foo =~ "bar" and "baz") {
问题描述
在旧的 Perl 代码库中,有这样的:
if ($foo =~ "bar" and "baz") {
它有效!如果我用更常见的分隔符 / 替换引号,它将不起作用。有人认识这种语法吗?我找不到任何关于以这种方式与绑定运算符一起使用“和”的讨论。如果我链接第二个“and”,它也可以工作,但如果我尝试“and not”,它就不起作用。看到这段代码我很惊讶,更惊讶的是它等效于:
if ($foo =~ /bar/ && $foo =~ /baz/) {
这是合法的语法吗?如果是,我在哪里可以找到它的文档?还是它的形式非常糟糕,需要重新设计?
解决方案
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
我不会称之为“工作”。
推荐阅读
- quantum-computing - Q#中如何实现格罗弗的扩散算子?
- java - 为什么我收到 HTTP 内部 500 错误?
- c# - 在 C# 中将 NaN 值转换为空字符串
- c++ - c++共享库fPIC或未定义库ubuntu 16.04
- java - 如何在 Java 中克隆 BlockingQueue?
- angularjs - 使用 Angular js 从 Document.ready 调用函数
- r - 标记稀疏矩阵 R 的行和列
- angularjs - 何我可以获得深层嵌套的角度 ui 路线视图?
- android - Firebase 短信验证替代方案
- python - 在python中将字节文本(类型为字符串)转换为字符串