#!/usr/bin/perl -w use strict; $|=1; my $mode = lc($ARGV[0]); ($mode && $mode =~ /^(win|mac|unix)$/) or die(usage()); my $end = ($mode eq 'win' ? "\r\n" : ($mode eq 'mac' ? "\r" : "\n")); my $file = $ARGV[1] or die(usage()); open(IN, "< $file") or die("Unable to open file [\"$file\": $!]"); my ($a, $b) = (0, 0); # for reading two consecutive chars while ($a || read(IN, $a, 1)) { if ($a =~ /^[\n\r]$/) { print $end; read(IN, $b, 1) or last; if ($b =~ /^[\n\r]$/ && $b ne $a) { # \r\n or \n\r $a = 0; } else { $a = $b; # save for next iteration } } else { print $a; $a = 0; } } close(IN) or die("Unable to close file [\"$file\": $!]"); exit; sub usage { return "Usage: $0 target filename > output\n where target = win, mac, or unix\n"; } 1;