我最近看到一些不熟悉Perl的人的代码。 他想比较两个字符串是否相等,但不知道 的eq
运营商,所以他用=~
这样的:
另一个片段被
if ($str1 =~ "foo") {
print "string equals 'foo'\n";
}
当然应该简单地读$str1 eq $str2
和$str1 eq "foo"
,以避免误报。
我通过Deparse
运行的代码,它说一切正常:
$ perl -MO=Deparse -e 'use strict;
use warnings;
my $str1="foobar";
my $str2="bar";
$str1 =~ $str2;
$str1 =~ "bar";'
use warnings;
use strict;
my $str1 = 'foobar';
my $str2 = 'bar';
$str1 =~ /$str2/;
$str1 =~ /bar/;
-e syntax OK
我通过docs看,但是从我的理解 情况如下:
- 一般语法是
m/pattern/
。 - 要么使用
m
和你的选择,而不是/
的分隔符(但要知道,'
和?
有特殊意义) - 或者离开关
m
但随后的分隔符必须是/
。
但显然的Perl理解$str1 =~ "foo"
作为$str1 =~ m/foo/
虽然没有m
存在。这是为什么?我希望这是一个语法错误。
您正在查看错误的文档部分:http://perldoc.perl.org/perlop.html#Binding-Operators – ThisSuitIsBlackNot
@ThisSuitIsBlackNot啊,谢谢你的联系。事实上,这是我正在寻找的信息。不过,应该有一些从“我的”部分到“你的”部分的链接。 – PerlDuck
我认为很少有地方的文档中提到的例子是**/regex/**,但它的工作原理与**“正则表达式”**一样。例如,拆分工作就是这样。 – blackpen