perl 5.21.1+ で POSIX.pm が C99 functions を default で export する問題。
https://github.com/yappo/p5-Geo-Coordinates-Converter/pull/1
Perl 5.21.1+ だと思うんだけど、POSIX.pm が C99 functions をサポートしていて、さらにそれを default で export してくる。具体的には round() とかそのへん。
具体的には以下のものね。
'strtold', # platform varying (C99)
# C99 math
qw/acosh asinh atanh cbrt copysign cosh erf
erfc exp2 expm1 fdim fma fmax fmin fpclassify
hypot ilogb isfinite isgreater isgreaterequal
isinf isless islessequal islessgreater isnan
isnormal isunordered j0 j1 jn lgamma log1p
log2 logb nan nearbyint nextafter nexttoward
remainder remquo rint round scalbn signbit
sinh tanh tgamma trunc y0 y1 yn/,
で、round() とかって極めて一般的な名前だから、急に export するようになるとかぶって阿鼻叫喚になるって可能性もあるよね。
だから、ちょっとデフォルトで追加されたやつ常に export するのやめたほうがいいんじゃないの?ってメールしてみた。
https://rt.perl.org/Ticket/Display.html?id=124446
実際これが Geo::Coordinates::Converter で問題になっていて、
package Geo::Coordinates::Converter::Format;
sub round { $_[1] }
package Geo::Coordinates::Converter::Format::ISO6709;
use POSIX;
みたいなコードがあって、これが以前と挙動が違っている。
とりあえず p-r は出したけど。 https://github.com/yappo/p5-Geo-Coordinates-Converter/pull/1
もちろん、use POSIX;
と書くのは危険だからやめよう! っていうのはわりとよく知られたプラクティスではあるのだが、まあやっぱりハマる人おおそうだし、一応コア側にそういうふうに思ってる人もいるんですよ、というメールは送っておいたってわけ。