This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Upgrade bignum from version 0.40 to 0.41
[perl5.git] / cpan / bignum / lib / Math / BigFloat / Trace.pm
1 #!/usr/bin/perl -w
2
3 package Math::BigFloat::Trace;
4
5 require 5.005_02;
6 use strict;
7
8 use Exporter;
9 use Math::BigFloat;
10 use vars qw($VERSION @ISA $PACKAGE @EXPORT_OK
11             $accuracy $precision $round_mode $div_scale);
12
13 @ISA = qw(Exporter Math::BigFloat);
14
15 $VERSION = '0.41';
16
17 use overload;                   # inherit overload from BigFloat
18
19 # Globals
20 $accuracy = $precision = undef;
21 $round_mode = 'even';
22 $div_scale = 40;
23
24 sub new {
25     my $proto = shift;
26     my $class = ref($proto) || $proto;
27
28     my $value = shift;
29     my $a = $accuracy;
30     $a = $_[0] if defined $_[0];
31     my $p = $precision;
32     $p = $_[1] if defined $_[1];
33     my $self = Math::BigFloat->new($value, $a, $p, $round_mode);
34
35     # remember, downgrading may return a BigInt, so don't meddle with class
36     # bless $self, $class;
37
38     print "MBF new '$value' => '$self' (", ref($self), ")";
39     return $self;
40 }
41
42 sub import {
43     print "MBF import ", join(' ', @_);
44     my $self = shift;
45
46     # we catch the constants, the rest goes go BigFloat
47     my @a = ();
48     foreach (@_) {
49         push @a, $_ if $_ ne ':constant';
50     }
51     overload::constant float => sub { $self->new(shift); };
52
53     Math::BigFloat->import(@a);                 # need it for subclasses
54 #    $self->export_to_level(1,$self,@_);         # need this ?
55 }
56
57 1;