Cannot understand result for multiline regex qr/( . $ .+ )/xms
===

For string "aa\nbb\ncc" I want to match from the last letter left to the first newline ("a") to the end of the multi line string and expected that
  
"aa\nbb\ncc" =~ qr/( . $ .+ )/xms matches "a\nbb\ncc"

and that

"aa\nbb\ncc\n" =~ qr/( . $ .+ )/xms matches  "a\nbb\ncc\n".

But I got no match for "aa\nbb\ncc" =~ qr/( . $ .+ )/xms  
and match "c\n" for "aa\nbb\ncc" =~ qr/( . $ .+ )/xms.  
Using qr/( . $ ..+ )/xms I got the expected results (see example code).

Perl version 5.14.2 .

Can anyone give an explanation for that behaviour ?

perldoc perlre :
       
       m   Treat string as multiple lines.  That is, change "^" and "$" 
           from matching the start or end of the string to matching the start 
           or end of any line anywhere within the string.

       s   Treat string as single line. That is, change "." to match any character 
           whatsoever, even a newline, which normally it would not match.

           Used together, as "/ms", they let the "." match any character whatsoever, 
           while still allowing "^" and "$" to match, respectively, just after and 
           just before ewlines within the string.

       \z  Match only at end of string


Running the following example code :

    #!/usr/bin/env perl

    use strict;
    use warnings;

    print "Multiline string : ", '"aa\nbb\ncc"', "\n\n";
    my $str = "aa\nbb\ncc";

    print_match($str, qr/( . $ )/xms);       # matches "a"
    print_match($str, qr/( . $ . )/xms);     # matches "a\n"
    print_match($str, qr/( . $ .. )/xms);    # matches "a\nb"
    print_match($str, qr/( . $ ..+ )/xms);   # matches "a\nbb\ncc"
    print_match($str, qr/( . $ .+ )/xms);    # NO MATCH ! Why ???
    print_match($str, qr/( . $ .+ \z )/xms); # NO MATCH ! Why ???

    print "\nMultiline string now with terminating newline : ", '"aa\nbb\ncc\n"', "\n\n";
    $str = "aa\nbb\ncc\n";

    print_match($str, qr/( . $ )/xms);       # matches "a"
    print_match($str, qr/( . $ . )/xms);     # matches "a\n"
    print_match($str, qr/( . $ .. )/xms);    # matches "a\nb"
    print_match($str, qr/( . $ ..+ )/xms);   # matches "a\nbb\ncc\n"
    print_match($str, qr/( . $ .+ )/xms);    # MATCHES "c\n" ! Why ???
    print_match($str, qr/( . $ .+ \z)/xms);  # MATCHES "c\n" ! Why ???

    sub print_match {
        my ($str, $regex) = @_;
        $str =~ $regex;
        if ( $1 ) {
            printf "--> %-20s matched : >%s< \n", $regex, $1;
        }
        else {
            printf "--> %-20s : no match !\n", $regex;
        }
    }

the output is :

    Multiline string : "aa\nbb\ncc"

    --> (?^msx:( . $ ))      matched : >a<
    --> (?^msx:( . $ . ))    matched : >a
    <
    --> (?^msx:( . $ .. ))   matched : >a
    b<
    --> (?^msx:( . $ ..+ ))  matched : >a
    bb
    cc<
    --> (?^msx:( . $ .+ ))   : no match !

    Multiline string now with terminating newline : "aa\nbb\ncc\n"

    --> (?^msx:( . $ ))      matched : >a<
    --> (?^msx:( . $ . ))    matched : >a
    <
    --> (?^msx:( . $ .. ))   matched : >a
    b<
    --> (?^msx:( . $ ..+ ))  matched : >a
    bb
    cc
    <
    --> (?^msx:( . $ .+ ))   matched : >c
    <


