my %results = (); $pfm->run_on_finish( sub { my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $data_structure_reference) = @_; my $data = Sereal::Decoder::decode_sereal($$data_structure_reference); # surely this is sequential code here so no need to lock %results, right? @results{keys %$data} = values %$data; });