The multiline flag lets anchors check the beginning and end of each line.

multiline-anchors Multiline matching is useful for small record blocks where each line can carry its own status.

Multiline Anchors

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

my $second = "warn";
my $block = "ok\n$second";
my $has_warn = $block =~ /^warn$/m;
my $line_count = scalar split /\n/, $block;
my $status = $has_warn ? "needs review" : "clear";

print "second=$second\n";
print "line_count=$line_count\n";
print "has_warn=$has_warn\n";
print "status=$status\n";
use strict;
use warnings;

my $second = "ok";
my $block = "ok\n$second";
my $has_warn = $block =~ /^warn$/m;
my $line_count = scalar split /\n/, $block;
my $status = $has_warn ? "needs review" : "clear";

print "second=$second\n";
print "line_count=$line_count\n";
print "has_warn=$has_warn\n";
print "status=$status\n";
use strict;
use warnings;

my $second = "fail";
my $block = "ok\n$second";
my $has_warn = $block =~ /^warn$/m;
my $line_count = scalar split /\n/, $block;
my $status = $has_warn ? "needs review" : "clear";

print "second=$second\n";
print "line_count=$line_count\n";
print "has_warn=$has_warn\n";
print "status=$status\n";
  1. $second ← warn, $block ← ok warn, $has_warn ← 1, $line_count ← 2

    4my $second→ warn = "warn"; #@second="ok", "fail"5my $block→ ok
    warn = "ok\n$secondwarn";6my $has_warn→ 1 = $blockok
    warn =~ /^warn$/m;7my $line_count→ 2 = scalar split /\n/, $blockok
    warn;8my $status→ needs review = $has_warn1 ? "needs review" : "clear";910print "second=$secondwarn\n";11print "line_count=$line_count2\n";12print "has_warn=$has_warn1\n";13print "status=$statusneeds review\n";
    outputsecond=warn
    line_count=2
    has_warn=1
    status=needs review
  1. $second ← ok, $block ← ok ok, $has_warn ← (empty), $line_count ← 2

    4my $second→ ok = "ok";5my $block→ ok
    ok = "ok\n$secondok";6my $has_warn→ (empty) = $blockok
    ok =~ /^warn$/m;7my $line_count→ 2 = scalar split /\n/, $blockok
    ok;8my $status→ clear = $has_warn(empty) ? "needs review" : "clear";910print "second=$secondok\n";11print "line_count=$line_count2\n";12print "has_warn=$has_warn(empty)\n";13print "status=$statusclear\n";
    outputsecond=ok
    line_count=2
    has_warn=
    status=clear
  1. $second ← fail, $block ← ok fail, $has_warn ← (empty), $line_count ← 2

    4my $second→ fail = "fail";5my $block→ ok
    fail = "ok\n$secondfail";6my $has_warn→ (empty) = $blockok
    fail =~ /^warn$/m;7my $line_count→ 2 = scalar split /\n/, $blockok
    fail;8my $status→ clear = $has_warn(empty) ? "needs review" : "clear";910print "second=$secondfail\n";11print "line_count=$line_count2\n";12print "has_warn=$has_warn(empty)\n";13print "status=$statusclear\n";
    outputsecond=fail
    line_count=2
    has_warn=
    status=clear