#!c:/perl/bin/perl -w

use strict;
use Getopt::Long();
use File::Find();


my $opt = {
};

sub Convert {
 my $f = shift;
 return unless -f $f  &&  ! -z _;
 print "Loading file $f\n" if $opt->{'verbose'};
 open(FILE, "<$f") || die "Failed to open file $f: $!";
 binmode(FILE) || die "Failed to request binary mode for $f: $!";
 my $contents;
 { local $/ = undef; $contents = <FILE>; }
 die "Failed to read $f: $!" unless defined $contents;
 close(FILE) || die "Failed to close $f: $!";
 my $newcontents = $contents;
 $newcontents =~ s/\r\n/\n/sg;
 if ($contents ne $newcontents) {
   print "Modifying file $f\n" if $opt->{'verbose'};
   (open(FILE, ">$f") && binmode(FILE)  &&  (print FILE $newcontents) &&
    close(FILE))
     || die "Failed to open file $f: $!";
 }
}

Getopt::Long::GetOptions($opt, "dir=s", "verbose");
if (@ARGV) {
 foreach my $f (@ARGV) {
   Convert($f);
 }
} else {
 my $dir = $opt->{'dir'} || ".";
 die "No such directory: $dir" unless -d $dir;
 File::Find::find(sub { Convert($File::Find::name) }, $dir);
}