Perl6: Capturing Windows newline in a string with regex

Perl 6 automatically chomps the line separator off for you. Which means it isn't there when you try to do a substitution.

Perl 6 also creates synthetic characters if there are combining characters. so if you want a base 16 representation of your input, use the encoding 'latin1' or use methods on $*IN that return a Buf.


This example just appends CRLF to the end of every line.
( The last line will always end with 0D 0A even if it didn't have a line terminator )

perl6 -ne 'BEGIN $*IN.encoding("latin1"); #`( basically ASCII )
    $_ ~= "\r\n";  #`( append CRLF )
    put .ords>>.fmt("%02X");'

You could also turn off the autochomp behaviour.

perl6 -ne 'BEGIN {
      $*IN.encoding("latin1");
      $*IN.chomp = False;
    };
    s/\n/\r\n/;
    put .ords>>.fmt("%02X");'

Tags:

Regex

Raku