Word boundaries help a global search count whole tokens instead of substrings.

word-boundaries Use word boundaries when the pattern should match a token by itself and skip the same letters inside a larger word.

Word Boundaries

text
word_boundaries.pl
Replay: real traced execution (multi-file project)
use strict;
use warnings;

my $text = "cat scatter cat";
my $count = 0;
my $last_pos = 0;

while ($text =~ /\bcat\b/g) {
    $count = $count + 1;
    $last_pos = pos($text);
}

print "text=$text\n";
print "count=$count\n";
print "last_pos=$last_pos\n";
use strict;
use warnings;

my $text = "catalog cat";
my $count = 0;
my $last_pos = 0;

while ($text =~ /\bcat\b/g) {
    $count = $count + 1;
    $last_pos = pos($text);
}

print "text=$text\n";
print "count=$count\n";
print "last_pos=$last_pos\n";
use strict;
use warnings;

my $text = "dog catalog";
my $count = 0;
my $last_pos = 0;

while ($text =~ /\bcat\b/g) {
    $count = $count + 1;
    $last_pos = pos($text);
}

print "text=$text\n";
print "count=$count\n";
print "last_pos=$last_pos\n";
  1. $text ← cat scatter cat, $count ← 0, $last_pos ← 0

    4my $text→ cat scatter cat = "cat scatter cat"; #@text="catalog cat", "dog catalog"5my $count→ 0 = 0;6my $last_pos→ 0 = 0;
  2. $count ← 1, $last_pos ← 3

    pass 1 of 2
    8while ($textcat scatter cat =~ /\bcat\b/g) {9    $count→ 1 = $count + 1;10    $last_pos→ 3 = pos($textcat scatter cat);11}
  3. $count ← 2, $last_pos ← 15

    pass 2 of 2
    8while ($textcat scatter cat =~ /\bcat\b/g) {9    $count→ 2 = $count + 1;10    $last_pos→ 15 = pos($textcat scatter cat);11}
  4. print "text=$text ";

    13print "text=$textcat scatter cat\n";14print "count=$count2\n";15print "last_pos=$last_pos15\n";
    outputtext=cat scatter cat
    count=2
    last_pos=15
  1. $text ← catalog cat, $count ← 0, $last_pos ← 0

    4my $text→ catalog cat = "catalog cat";5my $count→ 0 = 0;6my $last_pos→ 0 = 0;
  2. $count ← 1, $last_pos ← 11

    8while ($textcatalog cat =~ /\bcat\b/g) {9    $count→ 1 = $count + 1;10    $last_pos→ 11 = pos($textcatalog cat);11}
  3. print "text=$text ";

    13print "text=$textcatalog cat\n";14print "count=$count1\n";15print "last_pos=$last_pos11\n";
    outputtext=catalog cat
    count=1
    last_pos=11
  1. $text ← dog catalog, $count ← 0, $last_pos ← 0

    4my $text→ dog catalog = "dog catalog";5my $count→ 0 = 0;6my $last_pos→ 0 = 0;78while ($text =~ /\bcat\b/g) {9    $count = $count + 1;10    $last_pos = pos($text);11}1213print "text=$textdog catalog\n";14print "count=$count0\n";15print "last_pos=$last_pos0\n";
    outputtext=dog catalog
    count=0
    last_pos=0