Advanced Regular Expression Patterns
Multiline Anchors
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
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";
$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
$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
$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