The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/pro/bin/perl

# xls2csv: Convert Microsoft Excel spreadsheet to CSV
#	   (m)'13 [24-10-2013] Copyright H.M.Brand 2008-2015

use strict;
use warnings;

sub usage
{
    my $err = shift and select STDERR;
    print "usage: $0 [ -o file.csv ] file.xls\n";
    @_ and print join "\n", @_, "";
    exit $err;
    } # usage

use Getopt::Long qw( :config bundling nopermute passthrough );
my $csv;
my $opt_f;
GetOptions (
    "help|?"	=> sub { usage 0; },
    "o|c=s"	=> \$csv,
    "f"		=> \$opt_f,
    ) or usage 1;

my $xls = shift or usage 1, "No input file";
-r $xls         or usage 1, "Input file unreadable";
-s $xls         or usage 1, "Input file empty";

$csv or ($csv = $xls) =~ s/\.xls$/.csv/i;
if (-f $csv) {
    $opt_f or die "$csv already exists\n";
    unlink $csv;
    }

print STDERR "Converting $xls to $csv ...\n";
open STDOUT, ">", $csv;
exec "xlscat", "-c", $xls;