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);
}