use XML::RPC; use MIME::Base64; my $xmlrpc = XML::RPC->new('https://user:pass@some.server.com/trac/project/xmlrpc'); my $result = $xmlrpc->call('ticket.putAttachment', 2, 'Filename', 'Some Description', encode_base64('data, data - it is always the data') ); Dumpering $result gives: $VAR1 = { 'faultString' => '\'\'str\' object has no attribute \'data\'\' while executing \'ticket.putAttachment()\'', 'faultCode' => '2' };