package Dog; sub new { my $pkg = shift; bless { intelligence => shift, }, $pkg; } #### sub is_stupid { my $self = shift; return $self->{inteligence} < 3; } #### my $lassie = Dog->new(10); print "Lassie is " $lassie->is_stupid ? "dumb" : "smart"; #### package Dog; use fields qw/intelligence/; sub new { my $pkg = shift; my $self = $pkg->fields::new(); $self->{intelligence} = shift; $self; } #### my Dog $lassie; # perl knows, at compile time, that lassie isa Dog #### package Dog; use fields qw/intelligence/; sub new { my $pkg = shift; my Dog $self = $pkg->fields::new; $self->{inteligence}; # typo again, but this time it doesn't compile $self; }