$client_descr->{"Handle"} = $handle; $client_descr->{"In"} = \$in; $client_descr->{"Out"} = \$out; $client_descr->{"Err"} = \$err; # later ... my ($handle, $in, $out) = ($client_descr->{"Handle"}, $client_descr->{"In"}, $client_descr->{"Out"}); $in .= "new data\n"; pump $handle until $$out =~ /data arrived:/; # note the dereferencing - $$out print $$out;