我最近看到一些不熟悉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