Astro-satpass
view release on metacpan or search on metacpan
providing our own if not.
* Clarify load_module() documentation.
bin/satpass 0.017:
* Use looks_like_number() and max() from Astro::Coord::ECI::Utils.
* Recode _load_module to use Astro::Coord::ECI::Utils::load_module.
* Fix clipboard code to fail gracefully if Scalar::Util::weaken
is unavailable.
t/{moon,sun}.t:
* Skip singleton test if Scalar::Util::refaddr not available.
t/pod_coverage.t:
* Correct also_private setting to make it skip all-uppercase+numeric
(blind fix since mine seems to skip constants anyway, which is
lib/Astro/Coord/ECI/Moon.pm view on Meta::CPAN
push @$where, [split '\s+', $_];
}
} # End local symbol block.
my %static = (
id => 'Moon',
name => 'Moon',
diameter => 3476,
);
my $weaken = eval {
require Scalar::Util;
Scalar::Util->can('weaken');
};
our $Singleton = $weaken;
my %object; # By class
=item $moon = Astro::Coord::ECI::Moon->new ();
This method instantiates an object to represent the coordinates of the
Moon. This is a subclass of Astro::Coord::ECI, with the id and name
attributes set to 'Moon', and the diameter attribute set to 3476 km
per Jean Meeus' "Astronomical Algorithms", 2nd Edition, Appendix I,
page 407.
lib/Astro/Coord/ECI/Moon.pm view on Meta::CPAN
Any arguments are passed to the set() method once the object has been
instantiated. Yes, you can override the "hard-wired" id and name in
this way.
If C<$Astro::Coord::ECI::Moon::Singleton> is true, you get a singleton
object; that is, only one object is instantiated and subsequent calls to
C<new()> just return that object. If higher-accuracy subclasses are ever
implemented, there will be one singleton for each class.
The singleton logic only works if L<Scalar::Util|Scalar::Util> exports
C<weaken()>. If it does not, the setting of
C<$Astro::Coord::ECI::Moon::Singleton> is silently ignored. The default
is true if L<Scalar::Util|Scalar::Util> can be loaded and exports
C<weaken()>, and false otherwise.
=cut
sub new {
my ($class, @args) = @_;
ref $class and $class = ref $class;
if ( $Singleton && $weaken && __classisa( $class, __PACKAGE__ ) ) {
my $self;
if ( $self = $object{$class} ) {
$self->set( @args ) if @args;
return $self;
} else {
$self = $object{$class} = $class->SUPER::new (%static, @args);
$weaken->( $object{$class} );
return $self;
}
} else {
return $class->SUPER::new (%static, @args);
}
}
=item @almanac = $moon->almanac ($station, $start, $end);
This method produces almanac data for the Moon for the given observing
lib/Astro/Coord/ECI/Moon.pm view on Meta::CPAN
Prior to version 0.099_01 it always returned a clone. Yes,
this is a change in long-standing functionality, but a long-standing bug
is still a bug.
=cut
sub clone {
my ( $self ) = @_;
$Singleton
and $weaken
and return $self;
return $self->SUPER::clone();
}
=item $elevation = $moon->correct_for_refraction( $elevation )
This override of the superclass' method simply returns the elevation
passed to it. Since the Moon has no atmosphere to speak of, there should
be no diffraction to speak of either.
lib/Astro/Coord/ECI/Sun.pm view on Meta::CPAN
iterate_for_quarters => 1,
);
my %static = (
id => 'Sun',
name => 'Sun',
diameter => 1392000,
iterate_for_quarters => undef,
);
my $weaken = eval {
require Scalar::Util;
Scalar::Util->can('weaken');
};
our $Singleton = $weaken;
my %object; # By class
=item $sun = Astro::Coord::ECI::Sun->new();
This method instantiates an object to represent the coordinates of the
Sun. This is a subclass of L<Astro::Coord::ECI|Astro::Coord::ECI>, with
the id and name attributes set to 'Sun', and the diameter attribute set
to 1392000 km per Jean Meeus' "Astronomical Algorithms", 2nd Edition,
Appendix I, page 407.
lib/Astro/Coord/ECI/Sun.pm view on Meta::CPAN
Any arguments are passed to the set() method once the object has been
instantiated. Yes, you can override the "hard-wired" id, name, and so
forth in this way.
If C<$Astro::Coord::ECI::Sun::Singleton> is true, you get a singleton
object; that is, only one object is instantiated and subsequent calls to
C<new()> just return that object. If higher-accuracy subclasses are ever
implemented, there will be one singleton for each class.
The singleton logic only works if L<Scalar::Util|Scalar::Util> exports
C<weaken()>. If it does not, the setting of
C<$Astro::Coord::ECI::Sun::Singleton> is silently ignored. The default
is true if L<Scalar::Util|Scalar::Util> can be loaded and exports
C<weaken()>, and false otherwise.
=cut
sub new {
my ($class, @args) = @_;
ref $class and $class = ref $class;
if ( $Singleton && $weaken && __classisa( $class, __PACKAGE__ ) ) {
my $self;
if ( $self = $object{$class} ) {
$self->set( @args ) if @args;
return $self;
} else {
$self = $object{$class} = $class->SUPER::new (%static, @args);
$weaken->( $object{$class} );
return $self;
}
} else {
return $class->SUPER::new (%static, @args);
}
}
=item @almanac = $sun->almanac( $station, $start, $end );
This method produces almanac data for the Sun for the given observing
lib/Astro/Coord/ECI/Sun.pm view on Meta::CPAN
Prior to version 0.099_01 it always returned a clone. Yes,
this is a change in long-standing functionality, but a long-standing bug
is still a bug.
=cut
sub clone {
my ( $self ) = @_;
$Singleton
and $weaken
and return $self;
return $self->SUPER::clone();
}
=item $elevation = $tle->correct_for_refraction( $elevation )
This override of the superclass' method simply returns the elevation
passed to it. I have no algorithm for refraction at the surface of the
photosphere or anywhere else in the environs of the Sun, and explaining
why I make no correction at all seemed easier than explaining why I make
script/satpass view on Meta::CPAN
use Config;
use Symbol;
my ($clip, $clipout, $memio);
our @ISA;
BEGIN {
$IO::Clipboard::clipboard_unavailable = '';
eval "use Scalar::Util qw{weaken}; 1"
or $IO::Clipboard::clipboard_unavailable = <<eod;
Error - Clipboard unavailable. Unable to load Scalar::Util weaken.
eod
sub _win32 {
eval "use Win32::Clipboard" ?
sub {(my $s = $_[0]) =~ s/\n/\r\n/mg;
Win32::Clipboard->new ()->Set ($s)} : undef
}
sub _xclip {
no warnings;
script/satpass view on Meta::CPAN
sub new {
return $clip if $clip;
croak $IO::Clipboard::clipboard_unavailable
if $IO::Clipboard::clipboard_unavailable;
my $class = shift;
my $data = '';
my $clip = _memio ('>', \$data);
*$clip->{__PACKAGE__}{data} = \$data;
bless $clip, $class;
my $self = $clip;
weaken ($clip); # So we destroy the held copy when we need to.
$self;
}
sub DESTROY {
my $self = shift;
my $data = *$self->{__PACKAGE__}{data};
$clipout->($$data);
}
########################################################################
( run in 1.251 second using v1.01-cache-2.11-cpan-65fba6d93b7 )