http://qs321.pair.com?node_id=152897

in reply to Beginner's Object Orientation Exercises?

Ok, here's TRY 2. I'm almost 100% percent sure this is real object orientation. It's a package called AlienFarm that can make, teach, and give powers to aliens. (Constructed using the birth method.)

```#! Perl
use strict;

{
package AlienFarm;

sub birth {
my \$self=shift;
my (\$sec,\$min,\$hour,\$mday,\$mon,\$year,\$wday,\$yday,\$isdst)=localtime
+(time);
my \$name=shift;
\$mon+=1;
\$year+=1900;
my \$birth = "\$mon \$mday, \$year";
my \$alien = bless {
NAME => "\$name",
BIRTH => "\$birth",
POWERS => [ ],
"12th grade", "Harvard Freshman", "Harvard Sophmo
+re",
"Havard Junior", "Harvard Senior", "Employed", "C
+EO"],
LEVEL => "-1" }, "AlienFarm";
}
sub birthday {
my \$decide=shift;
ref \$decide ? \$decide->{BIRTH} : "an unknown time";
}
sub name {
my \$decide=shift;
ref \$decide ? \$decide->{NAME} : "an unknown name";
}
sub set_power {
my \$self=shift;
my \$power=shift;
push @{\$self->{POWERS}}, \$power;
}
sub get_powers {
my \$self=shift;
my \$num=1;
foreach my \$power ( @{\$self->{POWERS}} ) {
print "\$num) \$power\n";
\$num++;
}
print "\n";
}
sub teach_lessons {
my \$self=shift;
my \$level = \$self->{LEVEL};
\$level+=1;
\$self->{LEVEL} = \$level;
return "Lesson taught. Level: ". \$self->{BRAINS}[\$self->{LEVEL}] .
+"\n";

}
sub schooling {
my \$self = shift;
return \$self->{BRAINS}[\$self->{LEVEL}];
}
}