Warren Block wblock at
Tue Apr 15 15:46:58 PDT 2003

On Tue, 15 Apr 2003, Peter Elsner wrote:

> #!/usr/bin/perl
> # SCRIPT: dtox
> # AUTHOR: Peter Elsner <peter at>
> # PURPOSE: Convert Text files from DOS to UNIX (remove ^M's)
> #
> while (<>) {
>          if ($ARGV ne $OLDARGV) {
>                  rename($ARGV, $ARGV . '.bak');
>                  open(ARGVOUT, ">$ARGV");
>                  select(ARGVOUT);
>                  $OLDARGV=$ARGV;
>          }
>          s/^M//g;

Um... ^M would mean an M at the start of a line.  This should be


or use the tr operator:


> % dtox filename
> A back up file is created filename.bak and then a new file is created with
> the ^M's removed...

The Perl -i and -p options make this kind of script much easier to
write and debug:

perl -i.bak -pe 'tr/\r//d'

That's the whole thing.  If you look up those options in man perlrun,
you'll see they create almost the exact loop in the program above.

A csh alias should work fine:

alias dtox perl -i.bak -pe 'tr/\r//d'

-Warren Block * Rapid City, South Dakota USA

More information about the freebsd-questions mailing list