my $type = 'post'; my $url = redacted; my $headers = { 'Content' => { 'field1' => '1', 'field2' => [{'subfield1' => 'x', 'subfield2' => 'y'}, possibly more in array], 'field3' => {subfield3 => int, 'subfield4' => 'string'}, }, } my $response = $ua->$type( $url, %{$headers} ); #### $headers->{Content}->{'foo'} = ['bar', 'baz'] #### "field3": "HASH(0x2308c10)" #### $args = {data => $args}; my @newstring; foreach my $key (keys %{$args}) { foreach my $value (keys %{$args->{$key}}) { push @newstring, $key.'['.$value.']='.$args->{$key}->{$value}; } } $args = join('&',@newstring); my $response = $ua->post( $url, Content => $args );