You really should try to work with simpler examples before you make things complicated:
use strict;
use warnings;
use Data::Dumper;
my ($str,@match);
$str = "
foo
bar
baz
";
@match = $str =~ /(foo.*bar)/; # nope!
print Dumper \@match;
@match = $str =~ /(foo.*bar)/m; # nope!
print Dumper \@match;
@match = $str =~ /(foo.*bar)/s; # this one!
print Dumper \@match;
$str = "
foo bar
foo baz
";
@match = $str =~ /^(foo bar)/; # nope!
print Dumper \@match;
@match = $str =~ /^(foo bar)/s; # nope!
print Dumper \@match;
@match = $str =~ /^(foo bar)/m; # this one!
print Dumper \@match;
The first set of matches illustrates a case when the 's' modifier gets the match and the second set of matches illustrates a case when the 'm' modifier gets the match. Hope this helps!
jeffa
L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)