[Madrid-pm] Esto tiene que existir ya en cpan...
Diego Kuperman
diego en kuperman.com.ar
Dom Abr 11 06:07:44 PDT 2010
Hola!,
he estado pensando como acortar la representacion de enteros para usar
en las url's de una cosa que estoy haciendo y se me ha ocurrido que lo
que quiero es pasarlos a base 62 (caracteres válidos y que se leen bien
en una url). Esto es lo que he escrito:
my @base62 = ( 0..9, 'a'..'z', 'A'..'Z' );
my $short = rebase( 666, @base62 ); # devuelve 'aK'
sub rebase {
my ( $int, @chars ) = @_;
return $chars[0] if $int == 0;
my $base = scalar @chars;
my $ret = '';
while( $int > 0 )
{
$ret = $chars[ $int % $base ] . $ret;
$int = int( $int / $base );
}
return $ret;
}
sub revert_rebase {
my ( $ret, @chars ) = @_;
my %chars = map { $chars[$_] => $_ } 0 .. $#chars;
my $base = scalar @chars;
my $int = 0;
for ( $ret =~ /./g ) {
$int *= $base;
$int += $chars{$_};
}
return $int;
}
----
Pero este código es generico y me permite armar arrays para usar de base
lo que yo quiera:
rebase( 666, ( 0..9, 'A'..'F' ) ); #hex
rebase( 666, ( 0, 1 ) ); #bin
rebase( 666, ('Z'..'K', 'a'..'j', 9..0, 'k'..'z', 'J'..'A' ) );
...
El tema es que estoy seguro de que ya hay algun modulo que hace esto
pero no lo encuentro :(
Alguien lo conoce?, si no fuera así, que nombre le pondriais para subirlo?
Saludos,
-dk
Más información sobre la lista de distribución Madrid-pm