うまいぼうぶろぐ

linuxとhttpdとperlのメモ

範囲演算子って数値で範囲指定したとしても文字列リストが返るのか?

use bigintしてるのに有効数字が小さいから、なんで?と思って調べた。範囲演算子が文字列を返してるからなのかな。

範囲演算子

use bigint;
for my $n (16..20) {
  print $n ** $n, "\n";
}

実行結果

1.84467440737096e+19
8.27240261886337e+20
3.93464080752965e+22
1.97841965566031e+24
1.048576e+26

数値のリスト

use bigint;
for my $n (16,17,18,19.20) {
  print $n ** $n, "\n";
}

実行結果

18446744073709551616
827240261886336764177
39346408075296537575424
1978419655660313589123979
104857600000000000000000000

use bigintは数値に関わるところをoverloadするので、$nが文字列として扱われた場合は華麗にスルー?
あれあれ、でも累乗してるところは立派な数値演算ではないのだろうか。うーん、よくわからない。ラクダ本にヒントあるかな。