$form_data = join '&', map { my $key = $_; my $val = $form_data{$_}; $key =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; $val =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; "$key=$val" } sort keys %form_data;