On 2011-12-31 at 06:28 -0500, Phil Pennock wrote:
> I'm assuming you're after decoding the time from the first part of the
> message id, per "3.4 Message identification", and are not concerned
> about portability to MacOS?

If you do care about MacOS, then this, but I suggest coming up with a
better name for the function and constants.

----------------------------8< cut here >8------------------------------
#!/usr/bin/perl
use warnings;
use strict;

use constant BASE62DICT => join('', 0..9, 'A'..'Z', 'a'..'z');
# The approach of redefining "62" is what Exim uses.  :)
use constant BASE62SIZE => $^O eq "darwin" ? 36 : 62;

sub base62_to_num {
        my @input = split(//, $_[0]);
        my $result = 0;
        foreach my $b62digit (@input) {
                my $offset = index BASE62DICT, $b62digit;
                if ($offset == -1 or $offset >= BASE62SIZE) {
                        die "exception/base62_to_num: invalid base62 digit: 
$b62digit";
                }
                $result *= BASE62SIZE;
                $result += $offset;
        }
        return $result;
}

foreach my $arg (@ARGV) {
        if ($arg =~ /-/) {
                print "$arg :\n";
                foreach my $x (split(/-/, $arg)) {
                        print "\t$x\t", base62_to_num($x), "\n";
                }
        } else {
                print $arg, "\t", base62_to_num($arg), "\n";
        }
}
----------------------------8< cut here >8------------------------------

-- 
https://twitter.com/syscomet

-- 
## List details at https://lists.exim.org/mailman/listinfo/exim-users
## Exim details at http://www.exim.org/
## Please use the Wiki with this list - http://wiki.exim.org/

Reply via email to