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;
}