1eac174f2Safresh1# -*- mode: perl; -*- 2b8851fccSafresh1 3*3d61058aSafresh1# test subclassing Math::BigInt 4b8851fccSafresh1 5*3d61058aSafresh1package Math::BigInt::Subclass; 6b8851fccSafresh1 7b8851fccSafresh1use strict; 8b8851fccSafresh1use warnings; 9b8851fccSafresh1 10eac174f2Safresh1use Math::BigInt; 11b8851fccSafresh1 12*3d61058aSafresh1our @ISA = qw(Math::BigInt); 13b8851fccSafresh1 14*3d61058aSafresh1our $VERSION = "0.08"; 15b8851fccSafresh1 16*3d61058aSafresh1use overload; # inherit overload 17b8851fccSafresh1 18*3d61058aSafresh1# Global variables. The values can be specified explicitly or obtained from the 19*3d61058aSafresh1# superclass. 20*3d61058aSafresh1 21*3d61058aSafresh1our $accuracy = undef; # or Math::BigInt::Subclass -> accuracy(); 22*3d61058aSafresh1our $precision = undef; # or Math::BigInt::Subclass -> precision(); 23*3d61058aSafresh1our $round_mode = "even"; # or Math::BigInt::Subclass -> round_mode(); 24*3d61058aSafresh1our $div_scale = 40; # or Math::BigInt::Subclass -> div_scale(); 25*3d61058aSafresh1 26*3d61058aSafresh1BEGIN { 27*3d61058aSafresh1 *objectify = \&Math::BigInt::objectify; 28*3d61058aSafresh1} 29*3d61058aSafresh1 30*3d61058aSafresh1# We override new(). 31b8851fccSafresh1 32b8851fccSafresh1sub new { 33b8851fccSafresh1 my $proto = shift; 34b8851fccSafresh1 my $class = ref($proto) || $proto; 35b8851fccSafresh1 36*3d61058aSafresh1 my $self = $class -> SUPER::new(@_); 37*3d61058aSafresh1 $self->{'_custom'} = 1; # attribute specific to this subclass 38b8851fccSafresh1 bless $self, $class; 39b8851fccSafresh1} 40b8851fccSafresh1 41*3d61058aSafresh1# We override import(). This is just for a sample for demonstration. 42b8851fccSafresh1 43b8851fccSafresh1sub import { 44b8851fccSafresh1 my $self = shift; 45*3d61058aSafresh1 my $class = ref($self) || $self; 46b8851fccSafresh1 47*3d61058aSafresh1 my @a; # unrecognized arguments 48*3d61058aSafresh1 while (@_) { 49*3d61058aSafresh1 my $param = shift; 50*3d61058aSafresh1 51*3d61058aSafresh1 # The parameter "this" takes an option. 52*3d61058aSafresh1 53*3d61058aSafresh1 if ($param eq 'something') { 54*3d61058aSafresh1 $self -> {$param} = shift; 55b8851fccSafresh1 next; 56b8851fccSafresh1 } 57*3d61058aSafresh1 58b8851fccSafresh1 push @a, $_; 59b8851fccSafresh1 } 60*3d61058aSafresh1 61b8851fccSafresh1 $self -> SUPER::import(@a); # need it for subclasses 62b8851fccSafresh1} 63b8851fccSafresh1 64*3d61058aSafresh1# Any other methods to override can go here: 65*3d61058aSafresh1 66*3d61058aSafresh1# sub method { 67*3d61058aSafresh1# ... 68*3d61058aSafresh1# } 69*3d61058aSafresh1 70b8851fccSafresh11; 71