I don't think addFile() is returning what you think it is. I think you need to use one of the write*() methods in Archive::Zip instead of trying to print out each chunk yourself.
If that's not it, why don't you tell us what exactly the problem is. Do you get an error message? A corrupt file? Something else?