Perl のコピーが壊れているに違いないと思います。これは CygWin のバージョン (5.10) のものです。
pax$ perl -e 'printf("%011d\n", 99999999999);'
99999999999
pax$ perl -v
This is perl, v5.10.0 built for cygwin-thread-multi-64int
(with 6 registered patches, see perl -V for more detail)
Copyright 1987-2007, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
実行しているバージョンは何ですか (の出力perl -v
)?
Perl の 64 ビット対応バージョンを入手する必要があるかもしれません [そして、おそらく新しい 64 ビット プロダクション マシン] ("cygwin-thread-multi-64int"
私の出力の に注意してください)。これにより、少なくともコードを変更する必要がなくなります。
私がこれを述べているのは、あなたがコードを大幅に変更したくない (つまり、何かを壊すことを恐れている) という根拠に基づいています。新しいハードウェアのソリューションは、少し高価ですが、ほとんどの場合、ソフトウェアをまったく変更する必要はありません。それはあなたの優先順位に依存します。
もう 1 つの可能性は、Perl 自体が数値を正しく保存しているのに、単に問題が原因で間違って表示している可能性があることprintf()
です。その場合は、次のことを試してみてください。
$million = 1000000;
$bignum = 99999999999;
$firstbit = int($bignum / $million);
$secondbit = $bignum - $firstbit * million;
printf ("%d%06d\n",$firstbit,$secondbit);
それを関数に入れて、関数を呼び出して、次のような文字列を返します。
sub big_honkin_number($) {
$million = 1_000_000;
$bignum = shift;
$firstbit = int($bignum / $million);
$secondbit = $bignum - $firstbit * $million;
return sprintf("%d%06d\n", $firstbit, $secondbit);
}
printf ("%s", big_honkin_number (99_999_999_999));
これは 64 ビット プラットフォームでテストしたことに注意してください。32 ビットで独自のテストを行う必要がありますが、任意の倍率を使用できます (必要に応じて 2 つ以上のセグメントを含む)。
更新:このトリックは 32 ビット Perl で問題なく機能するため、機能を詰め込んでいるようbig_honkin_number()
に見えます。printf()
pax@pax-desktop:~$ perl -v
This is perl, v5.8.8 built for i486-linux-gnu-thread-multi
Copyright 1987-2006, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl". If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.
pax@pax-desktop:~$ perl qq.pl
99999999999