HTTP::Request::Common supports POSTing files without loading them into memory by passing a callback to the content method of the request. The same could be done for a PUT request. I don't see where passing a callback to content is documented, but it is required for documented features. Look at the code in HTTP::Request::Common that wouldn't get executed if $DYNAMIC_FILE_UPLOAD was false.
The catch is that HTTP::DAV relies on content being a string in numerous places, as far as I can tell. If so, fixing it to use a callback for content would entail a lot of work.