我要检查的是“免费”是否出现在单词边界中并且这不起作用(不打印):
use strict;
my @words= ("free hotmail msn");
my $free = "free";
$free =~ s/.*/\b$&\b/;
if ( $words[0] =~ m/$free/)
{
print "found\n";
}
我要检查的是“免费”是否出现在单词边界中并且这不起作用(不打印):
use strict;
my @words= ("free hotmail msn");
my $free = "free";
$free =~ s/.*/\b$&\b/;
if ( $words[0] =~ m/$free/)
{
print "found\n";
}
你需要做的就是写
my $free = 'free';
$free = qr/\b$free\b/;
print "found" if $words[0] =~ $free;
但是,如果您的@words
数组应该每个元素包含一个单词,那么您更有可能想要
use strict;
use warnings;
my @words= qw( free hotmail msn );
my $free = "free";
print "found\n" if $words[0] eq $free;
在模式替换中,如在双引号字符串中,\b
被解释为退格字符(chr(8)
在大多数系统上)。
$free =~ s/.*/\\b$&\\b/;
是一种尴尬的写作方式
$free = '\b' . $free . '\b';
$free = "\\b$free\\b";
但它会完成这项工作。