From your post, it seemed like you were unpacking into a filesystem. Do the majority of the files you parse each time you run the program change? If not, you could use something like like KinoSearch to allow you to quickly search files that have not changed.
Illuminatus, I WAS initially using Archive::Extract, but had to switch for a couple of reasons. I am on windows (because I can't convince the unix admin to allow me to store these files on the server) and since there is no bin/tar for windows, I have to use perl to do the unzipping which requires system memory. So much memory is required, that I get an "out of memory" error when extracting.
Anyway, the files are all different in each archive.
I've been using Cygwin for little things like this for years. Tar, gzip, zip, bzip2, etc., all work as expected from a normal Shell window (aka DOS window). If you have gzip or other compression installed, tar will support it natively, saving you some piping.
If you want to avoid Cygwin and/or get as much performance as possible, you can also get non-Cygwin, native ports of common linux/unix utilities here.