perl - Why does a match against regex $ return 1 when the input string contains a newline? -
why command
perl -e "print qq/a\n/ =~ /$/"
print 1
?
as far know, perl considers $
position both before \n
position @ end of whole string in multi-line mode, default (no modifier applied).
the match operator returns 1
true value because pattern matched. print
outputs value.
the $
anchor, specific sort of zero-width assertion. matches condition in pattern consumes no text. since have nothing else in pattern, /$/
matches target string including empty string. return true.
the $
end-of-line anchor, documented in perlre. $
allows vestigial newline @ end, both of these can match:
"a" =~ /a$/ "a\n" =~ /a$/
without /m
regex modifier, end of line end of string. but, modifier can match before newline in string:
"a\n" =~ /a$b/m
you might behavior if don't see attached particular match operator since people can set default match flags:
use re '/m'; # applies in lexical scope
over-enthusiastic fans of perl best practices make trio of pattern changing commands default (often not auditing every regex affects):
use re '/msx'
there's anchor, end-of-string anchor \z
, allows trailing newline. if don't want allow newline, can use lowercase \z
mean absolute end of string. these not affected regex flags.
Comments
Post a Comment