package Astro::Data::Astrological;
use strict;
use warnings;
use base qw( Astro::Data::Scientific );
sub new {
my $class = shift;
my $self = bless( {}, $class );
return $self;
}
sub hello {
my $self = shift;
my $msg = 'Hello, astrologically!';
return $msg;
}
1;
package Astro::Data::Scientific;
use strict;
use warnings;
sub new {
my $class = shift;
my $self = bless( {}, $class );
return $self;
}
sub hello {
my $self = shift;
my $msg = 'Hello, scientifically!';
return $msg;
}
sub goodbye {
my $self = shift;
my $msg = 'Goodbye, anyway';
return $msg;
}
1;
package Astro::Data;
$VERSION = '0.01';
use strict;
use warnings;
use base qw(
Astro::Data::Astrological
Astro::Data::Scientific
);
sub new {
shift; # off class name
if (-f "$ENV{HOME}/xyz") {
return Astro::Data::Astrological->new();
}
else {
return Astro::Data::Scientific->new();
}
}
1;
# t/001_load.t
use strict;
use warnings;
use Test::More
# tests => 2;
qw(no_plan);
use File::Copy;
use Carp;
BEGIN { use_ok( 'Astro::Data' ); }
my $home = "/Users/jimk";
my $obj1 = Astro::Data->new ();
isa_ok($obj1, 'Astro::Data::Astrological');
like($obj1->hello, qr/astrologically/,
"hello method returned correct string");
like($obj1->goodbye, qr/anyway/,
"goodbye method returned correct string");
move ("$home/xyz", "$home/abc")
or croak "Unable to rename xyz: $!";
ok( (-f "$home/abc"), "rename first-a");
ok(! (-f "$home/xyz"), "rename first-b");
my $obj2 = Astro::Data->new ();
isa_ok($obj2, 'Astro::Data::Scientific');
like($obj2->hello, qr/scientifically/,
"hello method returned correct string");
like($obj2->goodbye, qr/anyway/,
"goodbye method returned correct string");
move ("$home/abc", "$home/xyz")
or croak "Unable to rename abc: $!";
ok( (-f "$home/xyz"), "rename second-a");
ok(! (-f "$home/abc"), "rename second-b");
I hope this example is (a) correct and (b) useful to the next person who wonders about this.