Вот код, который иллюстрирует некоторые особенности поведения Perl - полученный из вашего примера:
use strict;
use warnings;
my $num = sprintf("%ld", 27823221234);
print "$num\n";
my $val = 27823221234;
my $str = sprintf("%ld", $val);
printf "%d = %ld = %f = %s\n", $val, $val, $val, $val;
printf "%d = %ld = %f = %s\n", $str, $str, $str, $str;
Для 64-битного Perl это дает:
27823221234
27823221234 = 27823221234 = 27823221234.000000 = 27823221234
27823221234 = 27823221234 = 27823221234.000000 = 27823221234
Если выдействительно нужно большое число (сотни цифр), а затем загляните в модули, которые их поддерживают.Например: