in reply to string replace with CRLF
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!
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: string replace with CRLF
by GrandFather (Saint) on Dec 19, 2006 at 20:43 UTC | |
by ikegami (Patriarch) on Dec 19, 2006 at 21:08 UTC |