The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
use IO::Async::Loop;
use Net::Async::XMPP::Client;

use Getopt::Long;

GetOptions(
	"jid=s"           => \my $jid,
	"target|t=s"      => \my $target,
	"message|m=s"     => \my $message,
	"host|h=s"        => \my $host,
	"password|p=s"    => \my $password,
	"debug|d"         => \my $debug,
) or die "bad options";

# Obtain a standard event loop
my $loop = IO::Async::Loop->new;

# Create a client object with our event callbacks
$loop->add(
	my $client = Net::Async::XMPP::Client->new(
		debug => $debug,
	)
);

$client->login(
	jid          => $jid,
	(defined $host
	? (host         => $host)
	: ()
	),
	password     => $password,
)->then(sub {
	$client->compose(
		to   => $target,
		body => $message,
	)->send
}, sub {
	warn "Something went wrong: @_";
})->then(sub {
	$client->logout
})->get;
say "Message sent to $target.";