3

我要检查的是“免费”是否出现在单词边界中并且这不起作用(不打印):

use strict;

my @words= ("free hotmail msn");

my $free = "free";

$free =~ s/.*/\b$&\b/;


if ( $words[0] =~ m/$free/)
{
    print "found\n";
}
4

2 回答 2

2

你需要做的就是写

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;
于 2012-07-06T17:49:52.510 回答
1

在模式替换中,如在双引号字符串中,\b被解释为退格字符(chr(8)在大多数系统上)。

$free =~ s/.*/\\b$&\\b/;

是一种尴尬的写作方式

$free = '\b' . $free . '\b';
$free = "\\b$free\\b";

但它会完成这项工作。

于 2012-07-06T19:42:24.987 回答