diff options
Diffstat (limited to 'lib/Net/XRC/Data.pm')
-rw-r--r-- | lib/Net/XRC/Data.pm | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/Net/XRC/Data.pm b/lib/Net/XRC/Data.pm new file mode 100644 index 0000000..6f26400 --- /dev/null +++ b/lib/Net/XRC/Data.pm @@ -0,0 +1,34 @@ +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; |