Just an idea... what if everything is perfectly right that way?
I am not sure how costly fix_file_4mysql() and
mysql_load_data() are, but if the do_scan() execution
is much faster than loading the DB, perl.exe is still digesting
the output of previous runs of FileList.exe.
So, you'll might observe only four FileList.exe jobs that
are currently running while the output of several
dozen previous runs is still processed.

How big is max => $total_threads?
The number of $temp_filename's currently existing
might provide a rough estimation of how many workers are
currently busy.