package Net::XRC::Data;
use strict;
sub new {
my $proto = shift;
my $class = ref($proto) || $proto;
my $data = shift;
my $self = ref($data) ? $data : \$data;
warn "$proto->($self [$data])\n"
if $Net::XRC::DEBUG > 1;
if ( $class eq 'Net::XRC::Data' ) { #take a guess
if ( ref($self) eq 'HASH' ) {
$class .= '::complex';
} elsif ( ref($self) eq 'ARRAY' ) {
$class .= '::list';
} elsif ( !defined($$self) ) {
$class .= '::null';
# now just guess... no good way to distinguish
# (bool and bytes are never guessed)
} elsif ( $$self =~ /^-?\d+$/ ) {
$class .= '::int';
} else {
$class .= '::string';
}
eval "use $class;";
die $@ if $@;
}
bless($self, $class);
}
1;