So, okay, if I'm running out of memory, why do the system calls die so silently?
How do you know they are dying silently? You haven't been listening to what system may be trying to tell you. I recommend you debug this based starting strictly with the system() return values, since you say it was working before. Don't complicate the problem by changing several things at once.
if (system "your command") != 0){
my $exitval = $? >> 8; # return val from your cmd
my $signum = $? & 127; # set if cmd stopped by a signal
my $coredumped = $? & 128; # set if cmd dumped core
}