Hmmmm...well if I pass an unchanged $print to the server, I get the exact same error. I even played around some more to finally get $print into true binary (took me awhile to finally figure out pack), but once again, I get the exact same error. How can I be getting the exact same error when I change the content???
Not sure what you mean by "true binary". Anyway, I don't think it has anything to do with the way you format the bulk data. Rather, it seems to be a bug with DBD::Sybase — at least you're not alone: see [freetds] DBD::Sybase: ct_send_data example fails.
Sorry, can't help with debugging, as I don't have MS SQL Server.