my $hugedata = ; my (%hash) : shared; %hash = process($hugedata); # perhaps filtering or rearranging it into a hash # $hugedata = undef; # <<< if done with it, then unload it, otherwise ... threads->create(...); # ... hugedata is duplicated, %hash is not.