package MyAutoloadDemo; use strict; use warnings; use Carp; our $AUTOLOAD; sub new { my $class = shift; my $self = {}; $self->{'data'}->{'name'} = 'spiros'; $self->{'data'}->{'address'} = 'london'; bless $self, $class; return $self; } sub AUTOLOAD { my $self = shift; my $type = ref $self; my $name = $AUTOLOAD; $name =~ s/.*://; # strip fully-qualified portion if (!exists $self->{data}->{$name} ) { croak "Can't access $name field in class $type"; } return $self->{data}->{$name}; } 1; #### use MyAutoloadDemo; my $demo = MyAutoloadDemo->new(); warn $demo->name; warn $demo->address; warn $demo->unknown; #### spiros at test.pl line 4. london at test.pl line 5. Can't access unknown field in class MyAutoloadDemo at test.pl line 6