默认情况下,模式匹配的对象是 $_ ,但是用绑定操作符 =~ 可以让 Perl 拿右边的模式匹配左边的字符串或字符串变量。比较下面代码:
[Perl] 纯文本查看 复制代码 #!/usr/bin/perl -w
my $var = "welcome to groad.net";
if (/\bto\b/) {
print "match\n";
} else {
print "not match\n";
}
if ($var =~ /\bwelcome\b/) {
print "match\n";
} else {
print "not match\n";
}
运行输出:# ./bind.pl
Use of uninitialized value $_ in pattern match (m//) at ./bind.pl line 5.
not match
match 输出中的第 1 行是因为加了 -w 参数后 Perl 发出的警告信息,它告诉我们在没有对 $_ 初始化的情况下就使用正则表达式去进行匹配。由于 $_ 为空,那自然无法匹配,所以第 2 行输出 not match 。在第 2 个 if 中,使用了 =~ 操作符,将匹配操作绑定到它左边的变量 $var 上,因为模式匹配,所以输出 match 。
还可以将模式绑定到标准输入上,这样欲比较的字符串来自标准输入,如下代码所示:
[Perl] 纯文本查看 复制代码 #!/usr/bin/perl -w
my $var = "welcome to groad.net";
if (/\bto\b/) {
print "match\n";
} else {
print "not match\n";
}
if ($var =~ /\bwelcome\b/) {
print "match\n";
} else {
print "not match\n";
}
运行输出:# ./bind2.pl
Do you like perl?yes
yes, you like perl.
# ./bind2.pl
Do you like perl?no
you do not like perl. 由于 =~ 运算符的优先级比赋值运算符要高,所以两边的括号也可以不要。所以上面也可以写成:my $like = <STDIN> =~ /\byes\b/i; |