曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 4183|回复: 0
打印 上一主题 下一主题

绑定操作符 =~

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2011-9-26 19:29:23 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
默认情况下,模式匹配的对象是 $_ ,但是用绑定操作符 =~ 可以让 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;
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-4 20:37 , Processed in 0.081764 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表