use Text::CSV; use UTF8BOM; use utf8; use Encode; use strict; my $origfile = 'csv.csv'; my $infile = 'csv_in.csv'; `cp -f $origfile $infile`; my $outfile = 'csv_out.csv'; my $in_fh; #`cp csv.csv $infile`; UTF8BOM->remove_from_file($infile); my @rows; my $csv = Text::CSV->new ( { binary => 1 } ) or die "Cannot use CSV: ".Text::CSV->error_diag (); open my $in_fh, "<:encoding(utf8)", "$infile" or die (__LINE__.": \n"); while ( my $row = $csv->getline( $in_fh ) ) { $row->[4] =~ m/Hardware/ or next; # Causes csv2xls.pl problems. push (@rows, ($row)); } $csv->eof or $csv->error_diag(); close $in_fh; $csv->eol ("\r\n"); my $csv_out; my $num_rows = @rows; print ("There are $num_rows rows\n"); open $csv_out, ">:encoding(utf8)", "$outfile" or die(__LINE__.": \n"); $csv->print ($csv_out, $_) for @rows; close $csv_out or die (__LINE__.": \n"); unlink("csv_out.xls"); `csv2xls.pl -u csv_out.csv`;