# data manager (short separate program) while( <> ) { chomp; my ( $command, $value, $address ) = split /\t/; if ( $command eq 'insert' or $command eq 'update' ) { eval( "$address = $value;" ); } elsif( $command eq 'delete' ) { delete $$address; } else{ eval "print \$address;" } } # and the main program: use IPC::Open2; my $pid = open2 my $wh, my $rh, 'DataManager.pl'; ... print $wh "insert\t\"fred\"\t" . '$deepthing01{ fred }{ bert }{ pete }[99]'; ...