If you plan to print it to a file directly, and not quoting the individual fields (for a simple tab separated values table) I think using the special variables $, and $\ is the approach leaving the code most readable:
@headers = qw(one two three);
@rows = (
['yes', 'no', 'maybe'],
['alpha', 'beta', 'and all the rest'],
);
{
local($\, $,) = ("\n", "\t");
print @headers;
print @$_ foreach @rows;
}
It's more complex if you want a CSV file, where the field values can contain the delimiter, the quoting character, or a newline. The next code will only quote a field if necessary:
@headers = qw(one two three);
@rows = (
['yes', 'no', 'maybe'],
['17" monitor', 'a;b', "foo\nbar"],
);
{
local($\, $,) = ("\n", ";");
print map {
my $s = $_;
$s =~ s/([\n;])|"/ $1 || '""' /ge and $s = qq["$s"];
$s
} @$_ foreach \@headers, @rows;
}
Following the modern Microsoft preference, I've used semicolons for the delimiter; and I've doubled the literal quotes appearing in the field data.
|