Peter P. Hallam pointed out that my hardcoded /usr/bin/sort and /usr/bin/cut weren't universal. I added a little path search with fallbacks to /usr/bin/env {sort,cut}. It's still not non-UNIX safe, of course, but I'm hoping I'll get patches for other systems.

Removed the --input and --output flags. Input files are named plainly on the command line, like the rest of the UNIX tool chain. Output goes to standard output, and pipeline redirection can send it elsewhere.

Also, it appears the documentation will continue until morale improves.

Refactored App::PipeFilter::Generic to open input and output files via methods.

Refactored App::PipeFilter::Generic to process each input file in a filter_file() method. App::PipeFilter::MysqlToJson uses a before() wrapper to extract the tab-separated column header so it can name output fields.

Added roles to read input in chunks or line-by-line. mysql2json works better as a line-by-line filter, while all the JSON input filters perform better reading in large chunks.

Added jcat and App::PipeFilter::JsonCat to flatten multiline JSON objects into one line each.

Did I mention the copious documentation? Ogods, so much documentation, and I'm not done yet.