Number::Fraction
Mark Fowler
mark at twoshortplanks.com
Wed May 1 16:40:02 BST 2013
On Wednesday, 1 May 2013 at 11:06, Th. J. van Hoesel wrote:
> However, can someone point me out what is happening between lines 132 and 144 of Fraction.pm ? This part is the neatest part of the module, where it enables the module to use constants in your Perl programs.
Nothing too complicated. Let's reformat this:
my %_const_handlers =
(q => sub { return __PACKAGE__->new($_[0]) || $_[1] });
To this:
my $subroutine_ref = sub {
my $string_value_of_source = shift;
my $scalar_containing_value = shift;
# attempt to create a number fraction
my $number_fraction = Number::Fraction->new(
$string_value_of_source
);
# if we could create a number fraction out of it
# i.e. the constructor returned something 'true'
# then return that
if ($number_fraction) {
return $number_fraction
}
# must have been a constant that number fraction can't handle,
# i.e. a string like "foo" or "bar" that isn't a number fraction
# just return the second argument to this function which is a
# scalar representing how perl has interpreted the source
return $scalar_containing_value
};
# prepare additional arguments we'll pass to overload later
# at import time if they used ":constant"
my %_const_handlers = (
'q' => $subroutine_ref
);
Which makes it clear what this is doing:
sub import {
overload::constant %_const_handlers if $_[1] and $_[1] eq ':constants';
}
It's doing the constant overloading if and only if someone wrote
use Number::Fraction qw(:constants)
HTH
Mark.
More information about the london.pm
mailing list