get the object‘s contents
if no block is given, the contents are cached in memory and
returned as a string if a block is given, it yields an IO object (via
IO::popen) which could be used to read a large file in chunks. use this for
large files so that they are not held in memory