# Takes an array and returns it as a CSV row sub format_csv { my @fields = @_; foreach (@fields) { if (not defined($_)) { $_ = ""; } elsif (0 == length($_)) { $_ = '""'; } elsif (/\s|"|'|,/) { s/"/""/g; $_ = qq("$_"); } } (join ",", @fields) . "\n"; } #### local *FILE; open (FILE, "> $file") or die "Cannot write '$file': $!"; print FILE format_csv(@cols); foreach my $row (@data) { print FILE format_csv(@$row{@cols}); } close(FILE) or die "Cannot close '$file': $!";