Most likely the 'load it if we need it' failed for a second object because PDL was already loaded. I was thinking more in terms of "use it if it's available" in any case. The following code implements that:
use strict;
use warnings;
package TestPDL;
my $PDLLoaded = eval {
require 'PDL.pm';
PDL->import ();
1;
};
sub new {
my ($class, %params) = @_;
$params{havePDL} = $PDLLoaded;
return bless \%params, $class;
}
package main;
my $obj = TestPDL->new ();
my $obj2 = TestPDL->new ();
print $obj2->{havePDL}
? "Have PDL available"
: "PDL not present or object create failed";
I'd write one basic object that does common stuff then derive from that to specialise for additional capabilities. Following that thought, I'd arrange the name space as Sport::Analytics::SRS for the basic module then Sport::Analytics::SRS::Cricket for the Cricket specialisation.
This technique allows a PDL only implementation for tricky or computationally expensive stuff with a pure Perl implementation provided either in the module or in a derived class at some point in the future if there is a need for it.
True laziness is hard work
|