# HG changeset patch # User Heiko Schlittermann # Date 1450826403 -3600 # Node ID 39c4a5f4ac336386a29bdd49e8decd36b6611b6f # Parent 1f4bf7fe870e044d2cb2f83c8e8e0c362bcded1b Add unbase62 diff -r 1f4bf7fe870e -r 39c4a5f4ac33 once.pl --- a/once.pl Mon Dec 21 00:39:49 2015 +0100 +++ b/once.pl Wed Dec 23 00:20:03 2015 +0100 @@ -50,8 +50,8 @@ sub base62; sub md5_base62 { ... } -my $rxVIEW = qr/[a-z\d]{6}-[a-z\d]+/i; # date-userhash -my $rxFILE = qr/[a-z\d]{6}-[a-z\d]+-./i; # date-filehash-deletemode +my $rxVIEW = qr/[a-z\d]{6}-[a-z\d]+/i; # date-userhash +my $rxFILE = qr/[a-z\d]{6}-[a-z\d]+-./i; # date-filehash-deletemode umask 077; @@ -335,6 +335,29 @@ exit 0; } +sub unbase62 { + my @digits = reverse split '', shift; + state $value = do { + my %value; + for ( + my ($symbol, $value) = (base62(0), 0) ; + length($symbol) == 1 ; + $symbol = base62 ++$value + ) + { + $value{$symbol} = $value; + } + \%value; + }; + state $base = scalar keys %$value; + + my $unbase62 = 0; + while (my ($p, $symbol) = each @digits) { + $unbase62 += $value->{$symbol} * $base**$p; + } + return $unbase62; +} + sub base62 { my $n = shift // $_; die 'input is >MAXINT' if $n == $n - 1 or $n == $n + 1;