The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package Net::XRC::Data::complex;

use strict;
use vars qw(@ISA);
use Net::XRC::Data;

@ISA = qw(Net::XRC::Data);

sub encode {
  my $self = shift;
  my %hash = %$self;
  my $typename = delete $hash{_type};
  ":$typename(". join("\n", map {
                                  "$_ ".
                                  isa( $hash{$_}, 'Net::XRC::Data' )
                                    ? $hash{$_}->encode
                                    : Net::XRC::Data->new($hash{$_})->encode
                                }
                                keys %hash
                     ).
            ")";
}