I had a similar need, but my files don't even exist on disk. I was building a web server that returns tars of files that came from other web servers. I never "cleanly" integrated my approach with Archive::Tar or packaged it up nicely, but here is the gist of it:
I take a callback from the caller, and call it to do any output. I pass the callback into HTTP::Request to retrieve the file from the remote site and pass it through to the web client.
for each file
HEAD the file on the remote server to get the file size
use Archive::Tar::File's internal _format_tar_entry to write the t
use HTTP::Request to retrieve the file from the remote server, pas
+sing it the callback for output
write TAR_PAD to fill out the BLOCK
write TAR_END x 2
Any ideas on a clean way to build a generic module that I could use are welcome...