Closed oschwald closed 7 years ago
This restriction is mentioned in the documentation:
When used with "out", "in" should be a reference to a CSV structure
(AoA or AoH) or a CODE-ref that returns an array-reference or a hash-
reference. The code-ref will be invoked with no arguments.
and this is also why there is this section in the docs:
Rewriting CSV
Rewrite "CSV" files with ";" as separator character to well-formed
"CSV":
use Text::CSV_XS qw( csv );
csv (in => csv (in => "bad.csv", sep_char => ";"), out => *STDOUT);
As "STDOUT" is now default in "csv", a one-liner converting a UTF-16
CSV file with BOM and TAB-separation to valid UTF-8 CSV could be:
$ perl -C3 -MText::CSV_XS=csv -we\
'csv(in=>"utf16tab.csv",encoding=>"utf16",sep=>"\t")' >utf8.csv
To enable your case is much harder than it might look, as it will break a lot of other supported work-flows. I already tried. One of the problems you might run into is on Windows dealing with EOL issues.
I have now committed a change that croaks showing the supported syntax
$ perl -Mblib -MText::CSV_XS=csv -we'csv (in => "in.csv", headers => "auto", out => "out.csv")'
Cannot use a string for both in and out. Instead use:
csv (in => csv (in => "in.csv"), out => "out.csv");
at -e line 1.
Thanks. That sounds like an improvement.
Currently, if both of these are file names, you get an error like:
I was trying to do something like: