in reply to Weird behavior of int()

Your subject line is mildly misleading: this is behaviour of Perl's string-to-number conversion ("numification") independent of how it is triggered (which is by ... + 0 in your first code fragment, but by int(...) in the second one).

It is long-standing behaviour when Perl converts a string to a number for it to parse as much of the string as possible as a number, but then give a warning if there is any unparsable garbage beyond that:

% perl -wle 'print 0 + $_ for qw{ 123 123foo 12e3 12e3f4 inf inflight +}' 123 Argument "123foo" isn't numeric in addition (+) at -e line 1. 123 12000 Argument "12e3f4" isn't numeric in addition (+) at -e line 1. 12000 Inf Argument "inflight" isn't numeric in addition (+) at -e line 1. Inf %

.. so this all seems quite consistent to me. (I guess you ran your test without warnings enabled, which is always a risky thing to do - warnings can help shed light, even if not Inf light. :)

The special values are handled in Perl's source code by Perl_grok_infnan; reading through the comments there will give you a clue about the many platform-specific variants that Perl also supports.