package TrigCalc; use warnings; use strict; # use Data::Dump qw(dd pp); # for debug use parent 'Exporter'; our $VERSION = '0.1.0'; our @EXPORT = qw(); # default exports: (none for now) our @EXPORT_OK = # optional exports qw(reduce) ; use constant SECS_PER_DEGREE => 3600; use constant SECS_PER_MINUTE => 60; # exported subroutines ############################################# sub reduce { # reduce from rightmost end of argument list. return secs_2_dms(dms_2_secs((reverse @_)[ 0 .. 2 ])); } # non-exported (utility) subroutines ############################### sub dms_2_secs { my ($secs, # seconds $mins, # minutes $degs, # degrees ) = @_; $secs ||= 0; # init as zero if undefined (or false: redundant) $mins ||= 0; $degs ||= 0; return $degs * SECS_PER_DEGREE + $mins * SECS_PER_MINUTE + $secs; } sub secs_2_dms { use integer; my ($secs, # seconds ) = @_; $secs ||= 0; # init as zero if undefined (or false: redundant) my $degs = $secs / SECS_PER_DEGREE; $secs %= SECS_PER_DEGREE; my $mins = $secs / SECS_PER_MINUTE; $secs %= SECS_PER_MINUTE; return $degs, $mins, $secs; } 1;