\z, as proposed by haukex might be the most appropriate solution: it only matches at the absolute end of the string, so both greedy and non greedy variants do what you want.
$p = substr($s, @-[1], (@+[1] - @-[1])); is a strange way to write $p = $1; you know you can access captures with $X with X the number of the of the capture right?
Also, rather than trying to make your output more explicit with enclosing [ and string length, I strongly advise you to use Data::Dump (or the Core Data::Dumper, but you have to set $Data::Dumper::useqq = 1; for the more explicit version) for debugging (it will take care or invisible, or look-alike characters for you, and works well with refs and structures)
use Data::Dump 'pp'; $s = "abc\n"; if ($s =~ /(ab.*?)\z/s) { pp($1); } if ($s =~ /(ab.*)\z/s) { pp($1); } __END__ "abc\n" "abc\n"
In reply to Re^3: Regex not matching closing newline?
by Eily
in thread Regex not matching closing newline?
by rverscho
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |