Update: I added the extends operator for creating sub/super-classes/inheritance.
Here's a sample of the "New Translation" of perl:
Code:
class Object{
sub Object($classname){
return bless {
_object_property => 500
};
}
our $_object_property;
sub toString($self){
return "Object state: >$_object_property<";
}
}
class Entity extends Object{
sub Entity($classname){
my $self = new Object;
$self->{_entity_property} = 300;
return bless $self;
}
our ($_entity_property);
sub toString($self){
return "Entity state: >$_entity_property<\n",
$self.SUPER::toString($self);
}
sub understand($self){
$_entity_property .= ' {understood}';
return $self;
}
sub comprehend($self){
$_entity_property .= ' {comprehended}';
return $self;
}
}
package main;
my $e = new Entity;
print $e.understand.comprehend.toString, "\n";
The output of the program:
Code:
Entity state: >300 {understood} {comprehended}<
Object state: >500<
and here's the real perl:
Code:
use warnings;use strict;package Object;our @ISA=qw//;use Alias qw/attr/;
sub Object{my $classname=shift;
return bless {
_object_property => 500
};
}
our $_object_property;
sub toString{my $self=attr shift;
return "Object state: >$_object_property<";
}
package Entity;our @ISA=qw/Object/;use Alias qw/attr/;
sub Entity{my $classname=shift;
my $self = Object->Object;
$self->{_entity_property} = 300;
return bless $self;
}
our ($_entity_property);
sub toString{my $self=attr shift;
return "Entity state: >$_entity_property<\n",
$self->SUPER::toString($self);
}
sub understand{my $self=attr shift;
$_entity_property .= ' {understood}';
return $self;
}
sub comprehend{my $self=attr shift;
$_entity_property .= ' {comprehended}';
return $self;
}
package main;
my $e = Entity->Entity;
print $e->understand->comprehend->toString, "\n";
I think classes, the 'dot' operator, and the 'extends' operator make this change in perl worth it.