--- 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;