initial import
[Net-XRC.git] / lib / Net / XRC / Data.pm
1 package Net::XRC::Data;
2
3 use strict;
4
5 sub new {
6   my $proto = shift;
7   my $class = ref($proto) || $proto;
8   my $data = shift;
9   my $self = ref($data) ? $data : \$data;
10   warn "$proto->($self [$data])\n"
11     if $Net::XRC::DEBUG > 1;
12
13   if ( $class eq 'Net::XRC::Data' ) { #take a guess
14     if ( ref($self) eq 'HASH' ) {
15       $class .= '::complex';
16     } elsif ( ref($self) eq 'ARRAY' ) {
17       $class .= '::list';
18     } elsif ( !defined($$self) ) {
19       $class .= '::null';
20
21     # now just guess...  no good way to distinguish
22     # (bool and bytes are never guessed)
23     } elsif ( $$self =~ /^-?\d+$/ ) {
24       $class .= '::int';
25     } else {
26       $class .= '::string';
27     }
28     eval "use $class;";
29     die $@ if $@;
30   }
31   bless($self, $class);
32 }
33
34 1;