in reply to Difficulty inserting a large object using DBD::Pg

I found this when reading the documentation on the PostgreSQL site:
A column of type OID is similar to an INTEGER column, but defining it as type OID documents that the column holds OID values.

The second snippet you showed using "do" works when $value is an integer. Also since, "atoi error" points to a problem while converting ASCII to integer, I think the evidence points to OIDs being integer-only.