Questo codice mostra una funzione a2n
che fa quello che avete bisogno
use strict;
use warnings;
printf "%2s = %d\n", $_, a2n($_) for qw/ A B C AA AB AC BA BB BC /;
sub a2n {
my $n = 0;
$n = $n * 26 + $_ for map { ord($_) & 0x1F } split //, shift;
$n;
}
uscita
A = 1
B = 2
C = 3
AA = 27
AB = 28
AC = 29
BA = 53
BB = 54
BC = 55
Un corrispondente n2a
assomiglia a questo
sub n2a {
my ($n) = @_;
my @a;
while ($n > 0) {
unshift @a, ($n-1) % 26;
$n = int(($n-1)/26); #Edited for failing corner case
}
join '', map chr(ord('A') + $_), @a;
}
ma questo sarebbe rompere se si fa '$ S-- mentre - $ n'. Finiresti con '-1' (un numero negativo) giusto? – chrsblck
@chrsblck L'operatore di decremento automatico non è magico, ma solo l'operatore di incremento. Questo è documentato in perldoc perlop. – TLP
@TLP esattamente il mio punto. – chrsblck