Astro-satpass
view release on metacpan or search on metacpan
lib/Astro/Coord/ECI/TLE.pm view on Meta::CPAN
# the listing based on the object being listed.
sub __list_type {
my ( $self ) = @_;
return $self->{inertial} ? 'inertial' : 'fixed';
}
# _looks_like_real
#
# This returns a boolean which is true if the input looks like a real
# number and is false otherwise. It is based on looks_like_number, but
# excludes things like NaN, and Inf.
sub _looks_like_real {
my ( $number ) = @_;
looks_like_number( $number )
or return;
$number =~ m/ \A nan \z /smxi
and return;
$number =~ m/ \A [+-]? inf (?: inity )? \z /smxi
and return;
return 1;
}
lib/Astro/Coord/ECI/TLE.pm view on Meta::CPAN
$self->{$name} = undef;
}
return 0;
}
}
# _set_optional_float_no_reinit
#
# This acts as a mutator for any attribute whose value is either undef
# or a floating-point number, and which does not cause the model to be
# renitialized when its value changes. We disallow NaN.
sub _set_optional_float_no_reinit {
my ( $self, $name, $value ) = @_;
if ( defined $value && ! _looks_like_real( $value ) ) {
carp "Invalid $name '$value'; must be a float or undef";
$value = undef;
}
$self->{$name} = $value;
return 0;
}
lib/Astro/Coord/ECI/Utils.pm view on Meta::CPAN
unless (eval {require Scalar::Util; Scalar::Util->import
('looks_like_number'); 1}) {
no warnings qw{once};
*looks_like_number = sub {
local $_ = shift;
# checks from perlfaq4
return 0 if !defined($_) || ref($_);
return 1 if (/^[+-]?[0-9]+$/); # is a +/- integer
return 1 if (/^([+-]?)(?=[0-9]|\.[0-9])[0-9]*(\.[0-9]*)?([Ee]([+-]?[0-9]+))?$/); # a C float
return 1 if ($] >= 5.008 and /^(Inf(inity)?|NaN)$/i)
or ($] >= 5.006001 and /^Inf$/i);
return 0;
};
}
=item $maximum = max (...);
This subroutine returns the maximum of its arguments. If List::Util can
be loaded and 'max' imported, that's what you get. Otherwise you get a
( run in 0.301 second using v1.01-cache-2.11-cpan-4d50c553e7e )