The shell call is to a program called bcp - a sybase utility which copies data from a file (with specified field widths or delimiters) into a table.
I think you are right though that there is probably no solution in perl, bar possibly the one below of doing the delete in blocks, I suspect the bcp method is going to prove faster though, given it is an optimised utility.... just a shame its closed source - might have been nice to build a module incorporating it...