examples/oop/point/eg/line3d.pl
use strict;
use warnings;

use FindBin;
use lib "$FindBin::Bin/../lib";

use Point3D;
use Line3D;

my $point1 = Point3D->new(x => 10, y => 20, z => 30);
my $point2 = Point3D->new(x => 15, y => 25, z => 35);

my $line = Line3D->new($point1, $point2);
print $line->isa('Line3D') ? 'ok' : 'false';
print " - Line3D\n";
print $line->isa('Line') ? 'ok' : 'false';
print " - Line\n";

print $line->length, "\n";
examples/oop/point/lib/Line3D.pm
package Line3D;
use strict;
use warnings;

use base 'Line';

sub length {
    my ($self) = @_;

    my $x = $self->p1->get_x - $self->p2->get_x;
    my $y = $self->p1->get_y - $self->p2->get_y;
    my $z = $self->p1->get_z - $self->p2->get_z;

    return sqrt($x**2 + $y**2 + $z**2);
}


1;