私が確認したいのは、「フリー」が単語境界で発生するかどうかであり、これは機能していません(何も出力されません):
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
配列に要素ごとに 1 つの単語が含まれていると想定されている場合は、必要になる可能性が高くなります
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";
しかし、それは仕事をします。