You want to use "\n" if binmode isn't on.
You want to use "\r\n" if binmode is on.
use List::MoreUtils qw( apply ); for my $bin (0..1) { for my $eol ("\n", "\r", "\r\n") { my $name = $eol; $name =~ s/\r/cr/; $name =~ s/\n/lf/; $name .= '-bin' if $bin; { open(my $fh, '>', $name); binmode($fh) if $bin; print $fh map { "$_$eol" } qw( abc def ); } my $file = do { open(my $fh, '<', $name); binmode($fh); local $/; <$fh> }; my $data = join ' ', apply { s/\x0D/CR/ } apply { s/\x0A/LF/ } split //, $file; printf("%-9s %s\n", "$name:", $data); unlink($name); }}
output
lf: a b c CR LF d e f CR LF <- want cr: a b c CR d e f CR crlf: a b c CR CR LF d e f CR CR LF lf-bin: a b c LF d e f LF cr-bin: a b c CR d e f CR crlf-bin: a b c CR LF d e f CR LF <- want
Update: Simplified the code a bit.
Update: Oops, removed bug added in simplification. open(my $fh, '>', $file_name) defaults to :crlf, but open(my $fh, '>', \$file) does not!
In reply to Re: string replace with CRLF
by ikegami
in thread string replace with CRLF
by bobdole
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |