Mac or Windows newlines seldom cause a problem. I think of \n as a perl newline. Perl strings always use it. Translation between it and your OS's representation is done by an I/O "layer". (In Unix, the "translation" does not actually change anything.) The only exception is when we change I/O behavior by specifying non-standard layers or binmode on input.
| [reply] [Watch: Dir/Any] |
| [reply] [Watch: Dir/Any] |
In Perl, "\n" is always one character, regardless of the platform. It is written as two bytes if you use the default encoding on some platforms, Windows being the most popular. Newline has a nice overview.
If you read a file containing 0D0A using the default encoding on Unix platforms, or with binmode on any platform, you get two characters "\r\n" which you can (or have to) process.
| [reply] [Watch: Dir/Any] |
$text_1 = "abc\nd";
$text_1 =~ m/.*(.|\n)/;
print("----------\n>" . $1 . "<\n");
Prints:
----------
>
<
Should print d | [reply] [Watch: Dir/Any] [d/l] [select] |
$text_1 = "abc\nd";
$text_1 =~ m/.*(.|\n)/;
...
Should print d
A narration of m/.*(.|\n)/ might be:
-
.* From the start of the string, grab as much as possible of anything that's not a newline (no /s modifier for dot);
-
(.|\n) Then match and capture the first thing that's either not-a-newline or a newline.
Looked at this way, the only thing that could possibly be captured in the given string would be a newline.
Indeed, if your regex has no operator introduced after Perl version 5.6, this kind of narration is what YAPE::Regex::Explain will give you:
c:\@Work\Perl\monks>perl -wMstrict -le
"use YAPE::Regex::Explain;
print YAPE::Regex::Explain->new(qr/.*(.|\n)/)->explain();
"
The regular expression:
(?-imsx:.*(.|\n))
matches as follows:
NODE EXPLANATION
----------------------------------------------------------------------
(?-imsx: group, but do not capture (case-sensitive)
(with ^ and $ matching normally) (with . not
matching \n) (matching whitespace and #
normally):
----------------------------------------------------------------------
.* any character except \n (0 or more times
(matching the most amount possible))
----------------------------------------------------------------------
( group and capture to \1:
----------------------------------------------------------------------
. any character except \n
----------------------------------------------------------------------
| OR
----------------------------------------------------------------------
\n '\n' (newline)
----------------------------------------------------------------------
) end of \1
----------------------------------------------------------------------
) end of grouping
----------------------------------------------------------------------
(There are newer and better regex parser/explainers around, but I like this one, limited as it is, for its explanatory style.)
Give a man a fish: <%-{-{-{-<
| [reply] [Watch: Dir/Any] [d/l] [select] |
DB<11> m/.*(.|\n)/s,print "<$1>" for "123","abc\n","abc\nd"
<3><
><d>
DB<12> m/.*(.)/s,print "<$1>" for "123","abc\n","abc\nd"
<3><
><d>
DB<13>
HTH!
| [reply] [Watch: Dir/Any] [d/l] [select] |