#!/usr/bin/perl -wpackage person;
use strict;sub sleep() {
my ($self) = @_;
my $name = $self->{"name"};
print("$name is person, he is sleeping\n");
}sub study() {
my ($self) = @_;
my $name = $self->{"name"};
print("$name is person, he is studying\n");
}
return 1;
#!/usr/bin/perl -wpackage dog;
use strict;sub sleep() {
my ($self) = @_;
my $name = $self->{"name"};
print("$name is dog, he is sleeping\n");
}sub bark() {
my ($self) = @_;
my $name = $self->{"name"};
print("$name is dog, he is barking\n");
}return 1;
#!/usr/bin/perl =wuse strict;
use person;
use dog;sub main()
my $object = {"name" => "tom"};
# 先把"tom"变为人
bless($object, "person");
$object->sleep();
$object->study();
# 再把"tom"变为狗
bless($object, "dog");
$object->sleep();
$object->bark();
# 最后,再把"tom"变回人
bless($object, "person");
$object->sleep();
$object->study();
}&main();# 程序运行时输出:
# tom is person, he is sleeping
# tom is person, he is studying
# tom is dog, he is sleeping
# tom is dog, he is barking
# tom is person, he is sleeping
#!/usr/bin/perl =wuse strict;
use person;
use dog;sub main()
my $object = {"name" => "tom"};
# 没有把类型信息和$object绑定,因此无法获知$object有sleep方法
$object->sleep();
$object->study();
}&main();# 程序运行输出为:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>struct object {
char name[16];
};struct person {
char name[16];
void sleep() { printf("%s is person, he is sleeping\n", this->name); }
void study() { printf("%s is person, he is studying\n", this->name); }
};struct dog {
char name[16];
void sleep() { printf("%s is dog, he is sleeping\n", this->name); }
void bark() { printf("%s is dog, he is barking\n", this->name); }
};#define bless(object, type) ((type*) object)int main()
struct object * o = (struct object *) malloc(sizeof(struct object));
strcpy(o->name, "tom");
// 先把"tom"变为人
bless(o, person)->sleep();
bless(o, person)->study();
// 再把"tom"变为狗
bless(o, dog)->sleep();
bless(o, dog)->bark();
// 最后,再把"tom"变回人
bless(o, person)->sleep();
bless(o, person)->study();
return 0;
}// 程序运行时输出:// tom is person, he is sleeping
// tom is person, he is studying
// tom is dog, he is sleeping
// tom is dog, he is barking
// tom is person, he is sleeping