So, you need to post some data securely to one of them new-fangled web apps.
# note: your curl must be compiled with ssl support to use https URLs
my $post_url = "https://www.domain.com/cgi-bin/AcceptXML";
my $curl = "/usr/local/bin/curl";
# We should probably tell curl to override the content-type
# header to indicate that we are posting XML and not
# the standard application/x-www-form-urlencoded -- or maybe
# the app you're posting to actually expects you to post in
# that content type (if so, comment out the next line) eg
# in a param=value construct like: xml=[url-encoded xml]
my $curl_opt = "-H 'Content-Type: text/xml'";
# set $basic_auth = "" if the app does not require basic authentication
my $basic_auth = "username:password";
$post_url =~ s|://|://$basic_auth\@| if $basic_auth;
# curl -d can be followed by a string of post data
# OR a @file or in this case @- which means to
# read the data from stdin. This is the best
# way to go if you are posting sensitive data and
# would like to avoid writing the data to a temp file.
# 2>/dev/null just suppresses output to STDERR.
# curl is very gabby with stderr for some reason.
open2(*README, *WRITEME, "$curl $curl_opt -d \@- $post_url 2>/dev/null");
# side note:
# Don't care about the response? Use open with a pipe...
# open(WRITEME,"|$curl $curl_opt -d \@- $post_url 2>/dev/null");
# ...and you won't have to deal with the Open2 library.
# sample post data... I like qq syntax for quoting multi-line
# strings but I suppose most people would use <<EOS here.
my $xml_out = qq[<?xml version="1.0" encoding="UTF-8"?>
<MoreData id="445A">Pink Elephants</MoreData>
# pick one from A/B/C
# (A) web app expects urlencoded xml document
print WRITEME &uri_escape($xml_out);
# (B) web app expects application/x-www-form-urlencoded
# print WRITEME "xml=".&uri_escape($xml_out);
# (C) web app expects raw xml (no urlencoding)
# print WRITEME $xml_out;
my @answer = <README>;
my $answer = join('',@answer);