| Convert-Age documentation | Contained in the Convert-Age distribution. |
Convert::Age - convert integer seconds into a "compact" form and back.
Version 0.04
use Convert::Age;
my $c = Convert::Age::encode(189988007); # 6y7d10h26m47s
my $d = Convert::Age::decode('5h37m5s'); # 20225
# or export functions
use Convert::Age qw(encode_age decode_age);
my $c = encode_age(20225); # 5h37m5s
my $d = decode_age('5h37m5s'); # 5h37m5s
synonym for Convert::Age::encode()
synonym for Convert::Age::decode()
The methods in this module are suitable for some kinds of logging and input/output conversions. It achieves the conversion through simple remainder arithmetic and the length of a year as 365.2425 days.
convert seconds into a "readable" format 344 => 5m44s
synonym for encode that can be exported
convert the "readable" format into seconds
synonym for encode that can be exported
Chris Fedde, <cfedde at cpan.org>
Please report any bugs or feature requests to
bug-convert-age at rt.cpan.org, or through the web interface at
http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Convert-Age.
I will be notified, and then you'll automatically be notified of progress on
your bug as I make changes.
You can find documentation for this module with the perldoc command.
perldoc Convert::Age
You can also look for information at:
Copyright 2007 Chris Fedde, all rights reserved.
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| Convert-Age documentation | Contained in the Convert-Age distribution. |
package Convert::Age; use warnings; use strict;
our $VERSION = '0.04';
use Exporter 'import'; our @EXPORT_OK = qw(encode_age decode_age);
my %convert = ( y => 365.2425 * 3600 * 24, d => 3600 * 24, h => 3600, m => 60, s => 1, ); sub encode { my $age = shift; my $out = ""; my %tag = reverse %convert; # largest first for my $k (reverse sort {$a <=> $b} keys %tag) { next unless ($age >= $k); next if (int ($age / $k) == 0); $out .= int ($age / $k). $tag{$k}; $age = $age % $k; } return $out; }
sub encode_age { goto &encode; }
sub decode { my $age = shift; return $age if ($age =~ /^\d+$/); my $seconds = 0; my $p = join "", keys %convert; my @l = split /([$p])/, $age; while (my ($c, $s) = splice(@l, 0, 2)) { $seconds += $c * $convert{$s}; } return $seconds; }
sub decode_age { goto &decode; }
1; # End of Convert::Age