xref: /openbsd-src/gnu/usr.bin/perl/cpan/Math-BigInt/t/Math/BigInt/Subclass.pm (revision 3d61058aa5c692477b6d18acfbbdb653a9930ff9)
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