Whilst the example you linked to doesn't use Test:: anything, your argument is somewhat deflated by the fact that that Text::CSV_XS has extensive unit tests attached to it, according to the Manifest you linked to. :-).
I haven't time to examine the example you referred to in detail, so I could be wrong, but I suspect there is a case to be made for contents of the main loop to be also made into a function.
Personally I'm deeply uncomfortable if someone has waffled on for 1000 lines of programming without breaking it up somehow! But I won't deny that there will always be exceptions to this principle, e.g. large tables of necessary data, text or whatever.
If you spot any bugs in my solutions, it's because I've deliberately left them in as an exercise for the reader! :-)