lo leggo e lo scrivo bene.

Ho visto... è un metodo di programmazione piuttosto arcaico, lo testimonia anche l'incompatibilità con use strict e l'uso di local.

Comunqe ti basta fare:

use strict;

my %simple_form;

&parse_form_data (*simple_form);

ma forse è ancora meglio:

&parse_form_data(\%simple_form);

sub parse_form_data {
my ($FORM_DATA) = @_;
....
if (defined($FORM_DATA->{$key})) {
$FORM_DATA->{$key} = join ("\0", $FORM_DATA->{$key}, $value);
} else {
$FORM_DATA->{$key} = $value;
}

}

il "*" serve a rappresentare il referenziamento di tutte le variabili denominate "simple_form", quindi:

$simple_form
@simple_form
%simple_form
&simple_form
<simple_form> # handler

e non vedo perchè in questo caso sia utile.