How many files are in the archive?
How many of those files are .txt files?
What is the average size of each of those files?
What do you need to do with those files?
Your usage of Benchmark is giving you the runtime of the bulk of the script, which doesn't help to narrow down the problem. Timing each step would be better, but still may not be enough.
The Benchmark module is best used to compare the runtime of different sets of code that accomplish the same thing, so you can determine which is more efficient.
If you simply want to time sections of code, it would be better to use Time::HiRes instead of Benchmark. http://search.cpan.org/~jhi/Time-HiRes-1.9719/HiRes.pm
Have you tried to profile the script with Devel::Profile as I previously recommended?
Your if block to check if the code is running is pointless because it will never evaluate to true.