1package IMDb::Generique; 2 3use 5.005; 4use strict; 5use vars qw($AUTOLOAD); 6use Carp; 7use LWP::UserAgent; 8use XML::LibXML 1.52; 9 10$IMDb::Ua = new LWP::UserAgent requests_redirectable => []; 11$IMDb::Parser = new XML::LibXML; 12 13sub fields 14{ 15 return(); 16} 17 18sub search 19{ 20 return(); 21} 22 23sub new 24{ 25 my($proto, $id) = @_; 26 my $class = ref $proto || $proto; 27 my $self = {}; 28 bless $self, $class; 29 return $self->init($id); 30} 31 32sub init 33{ 34 my($self, $id) = @_; 35 $self->{id} = $id; 36 return $self; 37} 38 39sub id 40{ 41 return $_[0]->{id}; 42} 43 44sub type 45{ 46 return(lc((split(/::/, ref($_[0])))[-1])); 47} 48 49sub AUTOLOAD 50{ 51 my($self) = @_; 52 my $type = ref($self) 53 or croak "$self is not an object"; 54 55 my $name = $AUTOLOAD; 56 $name =~ s/.*://; # strip fully-qualified portion 57 58 return if $name eq 'DESTROY'; 59 unless(grep($name eq $_, $self->fields)) 60 { 61 croak "Can't access `$name' field in class $type"; 62 } 63 64 if(!ref $self->{$name}) 65 { 66 return $self->{$name}; 67 } 68 elsif(ref $self->{$name} eq 'ARRAY') 69 { 70 return @{$self->{$name}}; 71 } 72} 73 741; 75